不知不觉一星期就过去了,又到了周末,哈哈,学习走起。
返回函数
函数作为返回值
闭包:如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。
闭包注意事项:
1.闭包中是不能修改外部作用域的局部变量的。
2.外部函数的变量会被认定为内部函数的变量,用nonlocal()函数,表明指定变量不是闭包的局部变量。
3.Python会在调用函数时才进行计算,所以在计算外部函数时,只有在内部函数执行完毕后才开始。解决方法就是使其返回的不是函数,而是函数值。
匿名函数
不需要显式的定义函数,直接用匿名函数更方便。
因为函数没有名字,不必担心函数名冲突。
匿名函数通常用关键字lambda表示,
lambda x: x * x语句相等于:
def f(x):
return x * x
匿名函数有限制:只能有一个表达式,不用写return,返回值就是该表达式的结果。
匿名函数也是函数对象也可以把匿名函数赋值给一个变量,在利用变量来调用该函数。
作为返回值返回
装饰器
在代码运行期间动态增加功能的方式,称之为装饰器(Decorator)
本质上decorator也是一个返回函数的高阶函数。
函数有个_name_属性,可以拿到函数的名字。
举例:定义一个能打印日志的decorator
其中Python的@语法是把decorator置于函数定义处。
=
上述运行原理就是先打印一个日志,在调用原函数。
如果decorator本身要传入参数,就需要编写一个返回decorator的高阶函数了。
此时的 =
我们用__name__属性去查看此时now的名称时发现他的名称变了,此时为了防止有些依赖函数签名的代码的执行出错。Python中的functool.wraps去处理这事。
在定义wrapper前面加上@functools.wraps(func)就行。