问题描述
如果装饰器没有输入,并且装饰的函数没有输入,我想编写一个默认的装饰器。
这里是一个示例,摘自Sebastiaan Mathot的Python装饰器教程,以说明问题(https://youtu.be/pr1xfd6oTwY): 如果此装饰器有一个参数,则它将一个随机数乘以0.5的幂,否则将乘以2的幂
import random
def power_of(arg):
def decorator(fnc):
def inner():
return fnc() ** exponent
return inner
# cheks if decorator takes an argument and def default otherwise
if callable(arg):
exponent = 2
return decorator(arg)
else:
exponent = arg
return decorator
@power_of(.5)
def random_odd_digit():
return random.choice([1,3,5,7,9])
print(random_odd_digit())
我知道他在这里做什么,但是如果我想用这样的输入调用random_odd_digit函数呢?
@power_of(.5)
def random_odd_digit(X):
return random.choice(X)
print(random_odd_digit([1,9]))
我知道提供内部函数和参数是可行的:
import random
def power_of(arg):
def decorator(fnc):
def inner(x):
return fnc(x) ** exponent
return inner
if callable(arg):
exponent = 2
return decorator(arg)
else:
exponent = arg
return decorator
@power_of(.5)
def random_odd_digit(x):
return random.choice(x)
print(random_odd_digit([1,9]))
但是我该如何编码,以便输入版本起作用?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)