def my_decorator(func) :
print "I am a ordinary function"
def wrapper() :
print "I am function returned by the decorator"
func()
return wrapper
def lazy_function() :
print "zzzzzzzz"
functionDecorator=my_decorator(lazy_function)
Run Code Online (Sandbox Code Playgroud)
我在Debug IO中
I am a ordinary function
Run Code Online (Sandbox Code Playgroud)
我不明白为什么有任何输出.我理解为什么这一行:
functionDecorator()
Run Code Online (Sandbox Code Playgroud)
回报我:
I am function returned by the decorator
another___zzzzzzzz
Run Code Online (Sandbox Code Playgroud)
但对于其他人,我想我会想念一些事情
小智 5
当您第一次呼叫时my_decorator,在它返回该功能之前wrapper,它将打印您的消息.
尝试functionDecorator()再次调用,你不会再次获得输出,因为该函数已被装饰my_decorator.my_decorator但是,每次调用时,它都会打印您的消息,因为它是一个正常的函数调用(恰好还会返回一个修饰函数).
另请参阅http://www.python.org/dev/peps/pep-0318/#current-syntax以获取实现装饰器的替代语法.