2017-01-11 80 views
0

我揣摩在python 装饰的意义和Python控制台如下练习一个片段:装饰工为什么这样工作?

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

@print_my_name 
def my_name(): 
    return "Hans" 

而且它会推出,

我汉斯

它从来没有发生在正常功能上。 有人能告诉我它是如何工作的吗?

谢谢

+0

你想知道什么? –

+0

@Shivkumar Kondi其实我没有叫my_name(),但它仍然自动工作。怎么来的? – codexplorer

+0

我已经更新了我的答案。如果可能的话,您可以在这里阅读它.https://www.programiz.com/python-programming/decorator –

回答

1

装饰器需要的功能定义和创建执行此功能并转换结果的新功能。

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

此代码,例如:

def bar(a): 
    print a 

foo = decorate(bar) 

装修有时采取参数,其被传递到动态生成的功能:

@decorate 
def foo(a): 
    print a 

会如果删除了修饰语法等同于这个代码改变他们的输出。

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

+0

感谢您的及时答复。我知道装饰者是什么。但是我想知道为什么在完成键入并点击“Enter”后,它会直接输出一个输出而不需要任何调用。 – codexplorer

+1

@ user3893952了解装饰的调用机制。这就是为什么我在评论 –

+0

中提到上面的链接好,我明白了你的观点。其实,foo =装饰(酒吧)在场景背后诀窍。谢谢, – codexplorer