首页 >

怎么理解Python的装饰器? |python编程输入N个自然数 求最大值

python实例开发,python 好书推荐,python教室座位,求根号2python,python 练手,deepnlp python,python 搜索键,python和postman,python序列数据,python docx 0.8.6,python编程输入N个自然数 求最大值怎么理解Python的装饰器? |python编程输入N个自然数 求最大值

理解Python装饰器(Decorator)

Python装饰器看起来类似Java中的注解,然鹅和注解并不相同,不过同样能够实现面向切面编程。

想要理解Python中的装饰器,不得不先理解闭包(closure)这一概念。

闭包

看看维基百科中的解释:

在计算机科学中,闭包(英语:Closure),又称词法闭包(LexicalClosure)或函数闭包(functionclosures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

官方的解释总是不说人话,but–talkischeap,showmethecode:

是一个局部变量,在函数执行之后应该就不会存在了。但是嵌套函数引用了这个变量,将这个局部变量封闭在了嵌套函数中,这样就形成了一个闭包。

结合这个例子再看维基百科的解释,就清晰明了多了。闭包就是引用了自有变量的函数,这个函数保存了执行的上下文,可以脱离原本的作用域独立存在。

下面来看看Python中的装饰器。

装饰器

一个普通的装饰器一般是这样:

这样就定义了一个打印出方法名及其参数的装饰器。

调用之:

输出:

装饰器在使用时,用了语法,让人有些困扰。其实,装饰器只是个方法,与下面的调用方式没有区别:

语法只是将函数传入装饰器函数,并无神奇之处。

值得注意的是,这是python提供的装饰器。它能把原函数的元信息拷贝到装饰器里面的func函数中。函数的元信息包括docstring、name、参数列表等等。可以尝试去除,你会发现的输出变成了wrapper。

带参数的装饰器

装饰器允许传入参数,一个携带了参数的装饰器将有三层函数,如下所示:

看到这个代码是不是又有些疑问,内层的decorator函数的参数func是怎么传进去的?和上面一般的装饰器不大一样啊。

其实道理是一样的,将其语法去除,恢复函数调用的形式一看就明白了:

输出结果与正常使用装饰器相同:

至此,装饰器这个有点费解的特性也没什么神秘了。

装饰器这一语法体现了Python中函数是第一公民,函数是对象、是变量,可以作为参数、可以是返回值,非常的灵活与强大。


怎么理解Python的装饰器? |python编程输入N个自然数 求最大值
  • 写代码是什么工? - 网络|
  • 写代码是什么工? - 网络| | 写代码是什么工? - 网络| ...

    怎么理解Python的装饰器? |python编程输入N个自然数 求最大值
  • 如何向女朋友解释前端工作是干嘛的? - 网络|
  • 如何向女朋友解释前端工作是干嘛的? - 网络| | 如何向女朋友解释前端工作是干嘛的? - 网络| ...

    怎么理解Python的装饰器? |python编程输入N个自然数 求最大值
  • css如何让div旋转 |css 代码 压缩
  • css如何让div旋转 |css 代码 压缩 | css如何让div旋转 |css 代码 压缩 ...