Python 如何访问传递给修饰函数的参数的各个参数
我试图用一个异常处理函数来修饰5个函数。每个修饰函数都接受不同数量的参数,但都有一个重要的共同参数fname。我想使用这个公共参数,如下例所示 这很接近,但我无法访问fname:Python 如何访问传递给修饰函数的参数的各个参数,python,decorator,python-decorators,Python,Decorator,Python Decorators,我试图用一个异常处理函数来修饰5个函数。每个修饰函数都接受不同数量的参数,但都有一个重要的共同参数fname。我想使用这个公共参数,如下例所示 这很接近,但我无法访问fname: def mydeco(func): def wrapper(*args, **kwargs): print(args) #print(fname) <== this fails as well; #Unwrapping args give
def mydeco(func):
def wrapper(*args, **kwargs):
print(args)
#print(fname) <== this fails as well;
#Unwrapping args gives 'SyntaxError: can't use starred expression here'
try:
print('Before func')
answer = func(*args,**kwargs)
print('after func in wrapper')
if answer == 2:
print(f"Great job {fname}")
except Exception as e:
print('blah', e)
return wrapper
@mydeco
def long(fname, lname):
print(f"hello {fname} {lname}")
return 2
@mydeco
def short(fname):
print(f"hello {fname}")
short('Bob')
long('Bob', 'Smith')
('Bob',)
Before func
hello Bob
after func in wrapper
('Bob', 'Smith')
Before func
hello Bob Smith
after func in wrapper
blah name 'fname' is not defined
def mydeco(func):
def包装(*args,**kwargs):
打印(args)
#print(fname)args是元组下的非关键字参数
kwargs是字典下的关键字参数
它还取决于使用哪一个的目的,在包装函数中,您需要相应地访问它们
long('Bob', 'Smith') # args = ('Bob', 'Smith') kargs = []
long(fname='Bob',lname='Smith') # args = () kargs= ['fname':'Bob', 'lname'='Smith']
args是元组下的非关键字参数
kwargs是字典下的关键字参数
它还取决于使用哪一个的目的,在包装函数中,您需要相应地访问它们
long('Bob', 'Smith') # args = ('Bob', 'Smith') kargs = []
long(fname='Bob',lname='Smith') # args = () kargs= ['fname':'Bob', 'lname'='Smith']
包装函数的参数是*args
和**kwargs
。lname
和fname
参数未在内部函数外的包装中定义
在这个函数调用中
长(‘鲍勃’、‘史密斯’)
位置参数作为*args元组传递。可以按如下方式在包装器中访问它们:args[0]
和args[1]
或者,如果将函数调用更改为
long(fname='Bob',lname='Smith')
然后,关键字参数将作为**kwargs字典传递。它们可以按如下方式访问:kwargs['fname']
和kwargs['lname']
包装函数的参数是*args
和**kwargs
。lname
和fname
参数未在内部函数外的包装中定义
在这个函数调用中
长(‘鲍勃’、‘史密斯’)
位置参数作为*args元组传递。可以按如下方式在包装器中访问它们:args[0]
和args[1]
或者,如果将函数调用更改为
long(fname='Bob',lname='Smith')
然后,关键字参数将作为**kwargs字典传递。它们可以按如下方式访问:kwargs['fname']
和kwargs['lname']
“args”只是一个元组,如果它不是空的,则取其第一项。如果为空,则使用字典“kwargs”中的键“fname”。“args”只是一个元组,如果不为空,则取其第一项。如果为空,请使用字典“kwargs”中的键“fname”。