装饰师为什么这样工作?

时间:2017-01-11 06:21:20

标签: python-2.7 python-decorators

我试着弄清楚python中装饰器的含义,并在python控制台上练习如下代码片段:

def print_my_name(name):
    print "I am %s" %(name())

@print_my_name
def my_name():
    return "Hans"

它会随之出现,

  

我是汉斯

在正常功能上永远不会发生。 有谁能告诉我它是如何运作的?

谢谢

1 个答案:

答案 0 :(得分:1)

装饰器接受函数定义并创建一个执行此函数并转换结果的新函数。

我能给出的最简单的解释是装饰器函数包装在另一个返回函数的函数中。

此代码,例如:

@decorate
def foo(a):
  print a
如果删除装饰器语法,

将等同于此代码:

def bar(a):
  print a

foo = decorate(bar)

装饰器有时会获取参数,这些参数会传递给动态生成的函数以改变其输出。

您应该阅读的另一个术语是闭包,因为这是允许装饰器工作的概念。