23
我正在学习Python。希望有人指出我正确的方式。
这是我想什么如下的事:如何将装饰器中的变量传递给装饰函数中的函数参数?
def decorate(function):
def wrap_function(*args, **kwargs):
str = 'Hello!' # This is what I want
return function(*args, **kwargs)
return wrap_function
@decorate
def print_message():
# I'd like to pass 'str' as mentioned above
# to any functions' argument like below:
print(str) # 'str' is same as above
任何想法?提前致谢。
请注意,第一个解决方案也是通过使用'functools.partial()'(但仅限于2.6版本)来实现的。同样的模块还提供'wrapps()'函数,可以用于装饰器来维护原始函数的名称和文档。 – RedGlyph 2009-12-27 10:24:32
@RedGlyph:为什么只使用'functools.partial()'2.6版本?除了functools模块是pyhton 2.5中的新增功能外,文档中没有提到任何内容。 – 2009-12-27 10:49:36
感谢Tor Valamo。替代解决方案对我来说很明显。但是如果装饰的函数是一个实例方法呢?实例方法的参数应该是这样的:'def print_message(str,self,* args,** kwargs):'这是正确的吗?再次感谢。 – Japboy 2009-12-27 11:41:48