学习第八天

浏览: 1472

不知不觉一星期就过去了,又到了周末,哈哈,学习走起。


返回函数

函数作为返回值

闭包:如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

闭包注意事项:

1.闭包中是不能修改外部作用域的局部变量的。

2.外部函数的变量会被认定为内部函数的变量,用nonlocal()函数,表明指定变量不是闭包的局部变量。

3.Python会在调用函数时才进行计算,所以在计算外部函数时,只有在内部函数执行完毕后才开始。解决方法就是使其返回的不是函数,而是函数值。

匿名函数

不需要显式的定义函数,直接用匿名函数更方便。

因为函数没有名字,不必担心函数名冲突。

匿名函数通常用关键字lambda表示,

lambda x: x * x语句相等于:

def f(x):
return x * x

匿名函数有限制:只能有一个表达式,不用写return,返回值就是该表达式的结果。

匿名函数也是函数对象也可以把匿名函数赋值给一个变量,在利用变量来调用该函数。

image.png

作为返回值返回

image.png

装饰器

在代码运行期间动态增加功能的方式,称之为装饰器(Decorator)

本质上decorator也是一个返回函数的高阶函数。

函数有个_name_属性,可以拿到函数的名字。

举例:定义一个能打印日志的decorator

image.png

其中Python的@语法是把decorator置于函数定义处。

image.png  =   image.png


上述运行原理就是先打印一个日志,在调用原函数。

如果decorator本身要传入参数,就需要编写一个返回decorator的高阶函数了。

image.png

此时的image.png = image.png

我们用__name__属性去查看此时now的名称时发现他的名称变了,此时为了防止有些依赖函数签名的代码的执行出错。Python中的functool.wraps去处理这事。

image.png

在定义wrapper前面加上@functools.wraps(func)就行。

推荐 1
本文由 小白学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

越来越有感觉了!

要回复文章请先登录注册