我是python的新手,学习装饰师。没有参数和有参数(如字符串)的装饰器似乎是直截了当的。但是如果我想传递一个全局值而不是一个“srting”作为参数,它就失败了。我有所有这些是不同的文件,所以我想使用全局变量。在File1:
def decorator(arg1, arg2):
def real_decorator(function):
def wrapper(*args):
print "i am decorated"
print arg1, arg2
function(*args)
return wrapper
return real_decorator
File2:
def glob(a, b):
global arg1
arg1 = a
global arg2
arg2 = b
@decorator(arg1, arg2) # pass it as 'string' ie('arg1', 'arg2') it PASSES, pass it as i have showed, it FAILS
def print_args(*args):
print 'i am ordinary'
for arg in args:
print arg
File3:
#calling functions
glob(1, 2)
print_args(3,4,5)
======================================
Pass: (when given as string)
i am decorated
arg1 arg2
i am ordinary
3
4
5
======================================
Fail: (when given global var)
Traceback (most recent call last):
File "/User/File2.py", line 19, in
@decorator(arg1, arg2)
NameError: global name 'arg1' is not defined
如果有任何帮助,我将不胜感激。从昨天开始我就一直这样。。!!在