一、什么是函数?
函数就是一种代码抽象的形式,是可以重复使用,用来实现一个或多个功能的代码段。函数是对做相似的事情或相似的动作进行封装,他能提高应用的模块性和代码的重复利用率。
二、函数的定义
def 函数名称(参数1,参数2,···):
函数体
return 返回值
举个例子:求两个数的最大值:
def max(a,b):
if a>= b:
return a
else :
return b
而且一个函数可以返回多个值,示例:
def Cacl(x,y,symbol):
if symbol == '+':
return x,y,x+y
elif symbol == '*':
return x,y,x*y
elif symbol == '/':
return x,y,x/y
elif symbol == '-':
return x,y,x-y
print(Cacl(2,3,'+'))
print(Cacl(2,3,'*'))
输出结果:(该返回值是个元组)
D:\python3_daima\python_1>python zuoye.py
(2, 3, 5)
(2, 3, 6)
三、函数调用
内部函数
Python中有许多内置的函数,我们必须知道他们的名字才可以进行调用,调用的示例如下:
len1 =len('123456')
print(len1) 返回值为6
函数在参数数量不正确或者类型不正确时会抛出TypeError错误
外部函数
def max(a,b):
if a>= b:
return a
else :
return b
c = max (5,9) 调用max函数
print(c) 返回结果9
四、Python默认参数的函数
定义函数的时候可以给函数传递参数值,当调用函数时没有传递这个参数,则会使用默认值,函数调用时有俩个参数,一个是必须参数,一个是默认参数,函数调用时必须要有必须参数,默认参数自己选择,默认参数必须跟在必要参数之后,顺序不能变化。
def yuan(r,pi=3.14): pi的默认值为3.14
return r**pi 返回r**pi
print(yuan(3)) r=5,调用时使用默认参数
print(yuan(3,3.1415926)) r=3,pi=3.1415926
执行结果:
D:\python3_daima\python_1>python zuoye.py
31.489135652454948 这个使用pi=3.14
31.544278843046833 这个使用pi=3.1415926
两种结果的精确度不一样(第二个更精确)
多个参数的函数调用
def per_info(name, sex='男', age=32):
print(name, sex, age)
per_info('woodman')
per_info('Helen', '女')
per_info('Bobo', age=28) # 要用后面的默认参数,需要给出参数名
per_info(age=28, sex='女', name='Baby') # 使用参数名传递参数,对参数位置没要求
tuple = ('Peter', '男', 45)
per_info(*tuple) # 要将列表或元组中值当参数传入函数,我们可在前面加上*
注意:第6行Bobo的代码, sex参数使用默认值,我们需要传递age参数时需要指定参数名;
第7行Baby代码,我们可以给所有传递值带上参数名称,带上参数名称后对参数可以在任意位置;
最后1行,在元组前加‘*’,表示将列表或元组中值当参数传入函数,注意参数的顺序和个数.
输出结果:
woodman 男 32
Helen 女 32
Bobo 男 28
Heli 女 28
Peter 男 45
五、函数的递归
函数对自身的调用,就是递归,python中的递归不允许超过1000次,递归必须要有一个终止条件,否则是一个死循环。
举个栗子:
def ji(n): 求1~100的积
if n==1: 结束条件
return 1 返回1结束递归
return n*ji(n-1) 递归方法
c = ji(100) 递归100次
print(c) 输出c的值
这个递归还有很多小故事:开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。计算结果非常恐怖(移动圆片的次数)大约是1.84467440*10^19,众僧们即便是耗尽毕生精力也不可能完成金片的移动了。
六、匿名函数
匿名函数lambda,用于比较简单的函数,能快速的写出来。他的语法结构为:变量名= lambda 参数:表达式
参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数
表达式:不能包含循环、return,可以包含if…else…
先创建一个匿名函数:
#
num = lambda: 1 == 3 1是否等于3
r = num()
print(r) 返回值为False
如果使用一般的函数则这样写:
def num():
return 1 == 2
r = num()
print(r)
相比于一般的函数,匿名函数比较简短,容易书写,但是当匿名函数比较复杂时,容易让人难以琢磨,代码的维护成本高。
七、全局函数
Python中有许多的内置函数,太多了不一一介绍了,这里只举例几个:
import builtins
dir(builtins)
abs # 返回参数的绝对值
可以写成函数:
def absnum):
if num >=0:
return(num)
else :
return(-num)
all # 参数是一个列表,只有列表中的元素都为真,则返回
any # 参数是一个列表,只有列表中的元素只要有一个为真,则返回真
可以判断一个值的大致范围
ascii # 跟eval相反,加上引号
eval # 去掉引号
len # 求长度
type # 判断类型
input # 接受数据
print # 打印数据
int
float
str
list
set
dict
tuple
max # 求最大值
min # 求最小值
id # 变量的内存地址
int
bin
oct
hex