函数定义后装饰?

Decorate a function after it is defined?

认为答案是否定的,但我似乎找不到明确的说法。我有以下情况;

def decorated_function(function):
    @functools.wraps(function)
    def my_function():
        print "Hello %s" % function.__name__
    return my_function

for attr, value in dct.iteritems():
    dct[attr] = decorated_function(value)

而我真正想要的是这样的东西;

def my_function(function):
    print "Hello %s" % function.__name__

for attr, value in dct.iteritems():
    dct[attr] = functools.wraps(my_function, value)

删除 decorated_function 令人困惑的 shell。装饰器只能在定义函数时应用吗?

您可以在定义函数后对其进行修饰。事实上,函数装饰器只是语法糖。例如,您可以替换

@classmethod
@synchronized(lock)
def foo(cls):
    pass

def foo(cls):
    pass
foo = synchronized(lock)(foo)
foo = classmethod(foo)

详情见https://www.python.org/dev/peps/pep-0318/