首页
学习
活动
专区
工具
TVP
发布

python学习之装饰器和闭包的艺术

装饰器和闭包常常为程序员们减少了很多代码量,在Python学习中,装饰器和闭包是常用的两个知识点。

python学习之装饰器和闭包的艺术

装饰器可以实现在代码运行期间修改函数的上下文,简单来说就是,在不改变原函数的情况下,丰富原函数的功能;而闭包简单来说就是,内层函数调用外层函数的变量,外层函数返回内层函数的引用。两者也有着密不可分的关系!!!

python学习之装饰器和闭包的艺术

了解了闭包和装饰器的定义,接下来我们来演示下:

Firstly,我们定义一个能打印"Info南"的函数并调用。

现在,我们在不改变原函数结构的情况下,为其添加一个功能:在打印“Info南”前,先打印出"Hello Python", 这个时候就该装饰器出马了。

定义一个装饰器: 它需要接受一个参数,该参数表示了要被装饰的函数(即my_name):

将相应的函数关装饰起来:使用@my_motto写在被装饰函数的前面(装饰器符号“@”属于语法糖,使得我们的代码更加简洁方便)

执行被装饰函数:在执行my_name函数的时候, 就可以在输出"Info南"之前先输出"Hello Python"

在上面的代码中, 最让我们疑惑的是装饰器函数定义里面的wrapper函数, 装饰器本身返回的是wrapper函数的定义, 而wrapper中则定义了对被装饰函数(my_name)的调用, func表示的就是被装饰函数, 装这就是饰器的作用。

my_motto的最终返回的wrapper函数的定义, 并不是执行结果,只有当wrapper真正执行的时候, 才会真正的执行my_name方法, 这就是闭包概念。

wrapper中的参数, 实际上则是传递给func(实际上是my_name)的参数

python学习之装饰器和闭包的艺术

总而言之, Python在函数定义中装饰器的实现, 其本质也只是使用了闭包的思路, 延迟调用, 并在调用前后拓展其他功能

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190818A017T000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券