我创建了一个python装饰器,如下所示。我希望这个装饰程序接受一个未知的参数列表。但是下面的代码不起作用。你知道吗
#!/usr/bin/env python
from functools import wraps
def my_decorator(decorated_function, **kwargs):
print "kwargs = {}".format(kwargs)
@wraps(decorated_function)
def inner_function(*args, **kwargs):
print "Hello world"
return decorated_function(*args, **kwargs)
return inner_function
@my_decorator(arg_1="Yolo", arg2="Bolo")
def my_func():
print "Woo Hoo!"
my_func()
当我运行它时,会出现以下错误:
File "./decorator_test.py", line 14, in <module>
@my_decorator(arg_1="Yolo", arg2="Bolo")
TypeError: my_decorator() takes exactly 1 argument (0 given)
为什么**kwargs
不接受我发送给decorator的多个参数?我该怎么修?你知道吗
本质上,当您有一个接受参数的decorator时,您需要调用它两次,一次调用关键字参数,然后再次调用要修饰的函数。你知道吗
在使用
@deco
语法之前,只需将函数传递到decorator函数中即可对其进行修饰如果您想包含其他关键字参数,您可以同时传递它们
但是
@deco
语法不允许这样做,它的工作方式更像这样,因此您调用的是decorator函数返回的函数。你知道吗要使用
@deco
语法实现这一点,您需要创建一个decorator来测试是否仅使用函数(装饰部分)调用它,或者是否使用关键字参数调用它(将decorator设置为传递函数)。你知道吗您可以这样使用它,而不需要任何关键字参数。你知道吗
或者你可以用关键字参数这样称呼它。在本例中,实际上是调用decorator函数,它返回另一个decorator函数,然后调用该函数来实际修饰函数。你知道吗
相关问题 更多 >
编程相关推荐