我有代码
chop_flag = True
def decorator(func):
def chop_num(num):
num = str(num)
num = num[:15]
return float(num)
return chop_num
def decorator2():
return decorator if chop_flag else break
然后在我的程序中的每个函数之前添加@decorator2
。这会产生类型错误("decorator2()接受0个位置参数,但给出了1个“),我也非常确定这不是我想要做的事情的好方法。
总而言之:如果是chop_flag = True
,我尝试获取程序中每个函数的输出,并通过chop_num()
函数运行它;如果是chop_flag = False
,我希望它只忽略装饰器。我想我应该通过对每个函数应用一个装饰器来实现这一点。任何帮助都将不胜感激。
更新代码:
chop_flag = True
def decorator(func):
if chop_flag == True:
def chop_num(num, *args, **kwargs):
num = func(*args, **kwargs)
num = str(num)
num = num[:15]
return float(num)
return chop_num
else:
return
它现在可以正常运行了,但是当我将我的文件导入解释器(例如)并调用add函数时,它显示"add() missing 1 required positional“,尽管我已经输入了两个参数。
发布于 2018-06-19 07:02:34
我认为你的最终装饰器应该看起来更像这样
def chop_num(num):
num = str(num)
num = num[:15]
return float(num)
chop_flag = True
def decorator(func):
def wrapper(*args, **kwargs):
val = func(*args, **kwargs)
if chop_flag:
return chop_num(val)
else:
return val
return wrapper
@decorator
def nineteen_digits():
return 1_000_000_000_000_000_000
print(nineteen_digits())
# 100000000000000.0
chop_flag = False
print(nineteen_digits())
# 1000000000000000000
https://stackoverflow.com/questions/50918257
复制相似问题