一、高阶函数
--高阶函数形成条件:
--函数作为参数传递 注意:不带括号
--函数作为返回值返回 注意:不带括号
例子:filter(lamda i : i % 3==0, list), sort(key = len, list)
二、匿名函数
lamda函数,当函数体内容较简单且不希望给函数命名时用到匿名函数
--公式:lamda 参数项目 :返回值(不需要写return)如:lamda i : i+1,表示所有的 i 加1操作。
三、闭包
--当函数作为返回值返回时,可以形成闭包。当有些数据不希望在全局中被访问或者希望保护数据安全时应用。
--闭包的三个必要条件
--函数嵌套
--把内部函数作为返回值返回(不需要加括号)
--内部函数必须要用到外部函数的变量
例子:求 列表中所有元素的平均值
def my_avg():
arr = []
def average(n):
arr.append(n)
return sum(arr)/len(arr)
return average
averge = my_avg()
averge(10)
四、装饰器
-- 装饰器的本质:传入一个旧的函数,然后对旧函数进行改造,然后返回一个新的函数。需要一个函数去包装旧函数,包装完之后还必须要返回这个新的函数,所以再嵌套一个函数把这个新函数返回了。因此总共有三层函数:
最外层函数:
新函数
旧函数
--格式:def f_out(old_func):
new _func(*args, **args):
装饰1(代码块)
res = old_func (*args, **args)
装饰2(代码块)
return res
return new_func
--常用用法:
--@f_out
old_func()