python函数一些高级话题
1、函数对象 属性和注解 函数也是一种对象,所以可以给一个函数对象添加属性 例如: def f(a):print(a) f.count = 1 print(f.count) #输出1 函数注解:在python3.0中(但不包括python2.6),也可以使用对函数对象附加注解信息——与函数的参数和结果相关的任意的用户定义的数据。python为声明注解提供了特殊的语法,但是他自身不做任何事情,注解完全是可选的,并且出现的时候只是直接附加到函数对象的__annotations__属性以供其他用户使用 注解语法:函数的注解编写在df头部行,就像与参数和返回值相关的任意表达式一样。对于参数,他们出现在紧随参数名之后的冒号之后;对于返回值,他们编写紧跟参数列表之后的一个->之后。 例如: def func(a:'spam',b:(1,10),c:float)->int: return a+b+c 调用注解的:func.__annotations__ 使用了注解后,也可以加加上默认值: def func(a:'spam'=1,b:(1,10)=2,c:float=3)->int: return a+b+c 注解只在def定义函数用有效,在lambda函数中无效 2、匿名函数 lambda lambda语法: lambda argument1,argument2,argument3,...argumentN:expression using arguments lambda是一个表达式,而不是一个语句。可以出现在一个列表常量或者函数调用的参数中 lambda的主体是一个单一的表达式,而不是一个代码块。 3、map 返回迭代器 map(函数,参数列表) #其中函数需要几个参数,后面就有几个参数列表 print(list(map(pow,[1,2,3],[1,2,3]))) #输出:1,4,27 4、filter 返回迭代器 filter(返回值为bool值的函数,参数列表) ,只能有一个参数,所有后面只能有一个参数列表,只返回函数结果为真时的数字 print(list(filter((lambda x:x>0),range(-5,5)))) #输出:1,2,3,4 5、reduce 返回单个结果 在python2.6中reduce是一个内置函数,在python3.0中reduce是在模块functools中 from functools import reduce print(reduce(lambda x,y:x+y),[1,2,3,4]) #输出:10 print(reduce(lambda x,y:x*y),[1,2,3,4]) #输出:24 6、在模块operator中,提供了内置表达式对应的函数 import operator,functools print(functools.reduce(operator.add,[2,4,6])) print(functools.reduce((lambda x, y :x+y),[2,4,6]))