美文网首页
python装饰器的理解

python装饰器的理解

作者: yatttto | 来源:发表于2017-04-02 21:38 被阅读0次

python装饰器应该算是面试常考到的用点,之前在flask的应用中也是会常常用到,抽空仔细看书查资料理解了下装饰器的概念,通过自己的理解记忆,应该对这个概念会有一个大致上具体的了解。

闭包

说起python装饰器,我们应该不得不谈谈闭包的概念。
我对闭包的理解是,当函数存在嵌套,子函数调用了父函数的变量,那么子函数体加上父函数中调用的变量,那么这时候子函数加上这个调用的变量,就形成了一个闭包。如果子函数没有调用父函数的变量,那么就不存在闭包。我们可以来看一段代码:

In [7]: def fun1():
   ...:     a,b,c = 1,2,3
   ...:     def fun2():
   ...:         x = 1
   ...:         return x+a
   ...:     return fun2
   ...: 

In [8]: foo = fun1()

In [9]: foo()
Out[9]: 2

在这里,fun2fun1中的a形成了一个闭包。每次调用父函数中的值的时候,就会产生一个新的闭包,如果我这里用的是b或者c,那么会产生不一样的闭包。
我们可以发现,在这里,我们传递的是一个整数。当我们传递的是一个函数的时候,那么就成了一个装饰器。装饰器的本质就是函数闭包,利用了函数闭包的特性

装饰器

In [3]: def decorator(func):
   ...:     def wrapped():
   ...:         print "{} is running".format(func.__name__)
   ...:         return func()
   ...:     return wrapped
   ...: 

In [4]: def foo():
   ...:     print "I'm the function"
   ...:     

In [5]: wrapped_func = decorator(foo)

In [6]: wrapped_func()
foo is running
I'm the function

在这里decorator就是装饰器,它将func包装起来这里的代码相当繁琐,这时候我们可以用python的语法糖来进行修饰@。代码如下

In [9]: @decorator
   ...: def bar():
   ...:     print "I'm the guy"
   ...:     
In [11]: bar()
bar is running
I'm the guy

这里只是简单的装饰器的用法,后续还会讨论分析其他的用法

参考

知乎:如何理解Python装饰器
深入浅出Python装饰器

相关文章

  • 2019-05-26python装饰器到底是什么?

    装饰器例子 参考语法 装饰器是什么?个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本...

  • Python中的Decorator装饰器

    Decorator 装饰器 理解decorator(装饰器)的关键, 在于理解在python中函数是第一公民, 并...

  • python 装饰器 补充

    重新理解python 装饰器 python 装饰器是一个函数,被装饰器所装饰的代码块最终也是一个函数这个对于一般的...

  • python装饰器

    装饰器简述 要理解装饰器需要知道Python高阶函数和python闭包,Python高阶函数可以接受函数作为参数,...

  • Python学习资料整理(不间断更新)

    关于Python装饰器的相关文章资料 1、[翻译]理解PYTHON中的装饰器 本篇文章是作者翻译stackover...

  • Python装饰器小谈

    近几日再次研究Python装饰器,对装饰器又有了新的理解和应用。如果这篇文章叫做小谈装饰器,不如重谈装饰器更来得亲...

  • python的柯里化和装饰器、闭包

    python的高级特性-装饰器有点类似java中的切面编程,要理解python的装饰器首先需要具备两个知识:柯里化...

  • 理解Python装饰器

    Python是很具特色的一门语言。除了面向协议编程的方式,还有许多语法糖,今天要介绍的语法糖————装饰器 我们不...

  • python装饰器理解

    阅读顺序: 函数引用 函数闭包 装饰器(最好先阅读上面的两个) 1.函数引用 2.函数闭包 3.装饰器 背景:一般...

  • 理解Python装饰器

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

网友评论

      本文标题:python装饰器的理解

      本文链接:https://www.haomeiwen.com/subject/ngmgottx.html