首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果在python中变量设置为true,则修饰文件中的所有函数

如果在python中变量设置为true,则修饰文件中的所有函数
EN

Stack Overflow用户
提问于 2018-06-19 06:25:22
回答 1查看 119关注 0票数 0

我有代码

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“,尽管我已经输入了两个参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50918257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档