First Class Object
函数在Python中是一等公民
函数也是对象,可调用的对象
函数可作为普通变量、参数、返回值等
高阶函数
数学定义:y=g(f(x))
高阶函数需满足的条件,至少其一
接受一个或多个函数作为参数
输出一个函数
内建函数的高阶函数
排序:sorted(iterable[,key][,reverse])
返回一个新列表,对一个可迭代对象的所有元素排序,排序规则为key定义的函数,reverse表示是否翻转
数据过滤:filter(function,iterable)
过滤可迭代对象的元素,返回一个迭代器
Function是一个具有参数的函数,返回bool
映射:map(function,*iterables)
对多个可迭代对象的元素按照指定的函数进行映射,返回一个迭代器
柯里化Currying
将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数
z=f(x,y)转化为z=f(x)(y)
通过嵌套函数即可将函数转化成柯里化函数
装饰器
装饰器(无参)
是一个函数
函数作为它的形参
返回值也是一个函数
使用@function方式简化调用
副作用:原函数对象的属性在使用装饰器时会被修改
装饰器和高阶函数
装饰器是高阶函数,但装饰器是对传入函数的功能的装饰,即功能的增强
装饰器函数():
前置功能增强 #被装饰函数执行前运行
被增强函数
后置功能增强 #被装饰函数执行后运行
文档字符串
Documentation Strings
在函数语句块的第一行,习惯使用多行文本,多使用三引号
惯例首字母大写,第一行概述,空一行,第三行开始详细描述
可使用特殊属性__doc__访问该文档
装饰器(带参)
是一个函数
函数作为它的形参
返回值是一个不带参的装饰器函数
使用@function(形参列表)但是调用
可以看做在装饰器外层又加了一层函数
functools模块
functools.update_wrapper(wrapper, wrapped, assigned=(‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’, ‘__annotations__’), updated=(‘__dict__’,))
类似copy_property
wrapper包装函数、被更新者、wrapped被包装函数、数据源
assigned中是要被覆盖的属性,模块名、名称、限定名、文档、参数注解
updated中是要被更新的属性
增加一个__wrapped__属性,wrapped函数仍然保留
functools.wraps(wrapped, assigned=(‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’, ‘__annotations__’), updated=(‘__dict__’,))
类似copy_property
wrapped 被包装函数
assigned中是要被覆盖的属性,模块名、名称、限定名、文档、参数注解
updated中是要被更新的属性
增加一个__wrapped__属性,wrapped函数仍然保留
原创文章,作者:ZBD20,如若转载,请注明出处:http://www.178linux.com/96886