函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
定义和调用
>>> def add(x,y): ... print('x=',x) #Python3必须加"()" ... print('y=',y) ... return x+y ... >>> add(1,2) x= 1 y= 2 3
参数收集
#当参数不确定时,使用*定义函数,并返回一个元组
def func(x,*arg): print (x) result=x print (arg) for i in arg: result +=i return result print (func(1,2,3,4,5,6,7,8,9))
#返回结果 1 #对应print (x) (2, 3, 4, 5, 6, 7, 8, 9) #对应print (arg) 45 #最后print (func(1,2,3,4,5,6,7,8,9))结果
#当参数为赋值语句时,使用**定义函数,并返回一个字典
>>> def f(**karg): ... print (karg) ... >>> f(a=1,b=2,c=3) #当参数为非赋值语句时,报错 {'c': 3, 'a': 1, 'b': 2}
*和**定义函数综合举例
>>> def foo(x,y,z,*arg,**karg): ... print (x) ... print (y) ... print (z) ... print (arg) ... print (karg) ... >>> foo('taylor',1989,'adele') taylor 1989 adele () {} >>> foo(1,2,3,4,5) 1 2 3 (4, 5) {} >>> foo(1,2,3,4,5,name="taylor") 1 2 3 (4, 5) {'name': 'taylor'}
几种定义方式汇总
1. def a(p1,p2,p3) #参数的位置很重要
2. def a(p1=v1,p2=v2) #定义的时候直接赋值
3. def a(*arg) #适用不确定个数
4. def a(**arg) #必须接收arg=val的形式
几个函数
lambda
>>> num=[1,2,3,4,5] >>> lam=lambda x:x+1 #函数后直接使用变量,变量后为冒号隔离表达式,表达式的结果为函数的返回值 >>> n=[] >>> for i in num: ... n.append(lam(i)) ... >>> n [2, 3, 4, 5, 6]
map
map(func,seq),对可迭代对象的每个元素执行func函数
>>> num=[1,2,3,4,5] >>> list(map(lambda x:x+1,num)) #python3需要将map转换成list格式,否则报错,因为直接使用map返回的是iterators [2, 3, 4, 5, 6]
>>> l1=[1,2,3,4,5] >>> l2=[9,8,7,6,5] >>> list(map(lambda x,y:x+y,l1,l2)) [10, 10, 10, 10, 10]
reduce
reduce(func,seq),func必须为二元操作函数,先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。横向运算。
>>> from functools import reduce #python3无法直接使用reduce函数,需先引用 >>> reduce(lambda x,y:x+y,[1,2,3,4,5]) #“横着”依次计算 15
filter
filter(func, iterable),对iterable中的元素执行func,并将满足func的元素返回新list中
>>> l=[1,2,3,4,5] >>> list(filter(lambda x:x>3,l)) #同reduce函数 [4, 5]
等价语句
>>> [x for x in l if x>3] #三元操作符 [4, 5] #三元操作符 A=Y if x else Z 如果x为真,执行A=Y 如果x为假,执行A=Z