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]))

  

原文地址:https://www.cnblogs.com/hbcb533/p/3675937.html