装饰问题

use*_*618 1 python decorator

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以获取实现装饰器的替代语法.