将函数参数设置为全局变量b

2024-04-25 07:13:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图简单地使一个函数接收的参数对文件中的所有其他函数都是可访问的,或者设置为全局变量,而不必将其作为所有其他函数的参数传递。到目前为止,我已经尝试将其设置为全局变量,但显然不能将参数也设置为全局变量。你知道吗

下面是我想要的一个简单例子:

def add(a,b, verbose):
    global verbose
    return a + b

result = add(2,3, False)
print(verbose)

在我的例子中,被调用的函数位于另一个文件中,因此不能预先将verbose设置为全局函数。任何帮助都将不胜感激!你知道吗


Tags: 文件函数addfalseverbose参数returndef
2条回答

如果要分配给函数中的全局verbose变量,可以执行以下操作:

def add(a,b, verbose_value):
    global verbose
    verbose = verbose_value
    return a + b

result = add(2,3, False)
print(verbose)

第一点,一般来说,globals是邪恶的——或者更确切地说,应该尽可能避免从函数中变异或更糟糕地重新绑定globals。你知道吗

第二点:在Python中,“global”真正的意思是“模块级”——没有“进程级”global(注意,这是一个设计好的选择,基于上面的第一点)

第三点:对于您的一般用例(应用程序设置),“不那么邪恶”的方法是让您的所有模块都使用设置系统,因此您的模块只需导入设置并从中读取参数的值(cf django settings),而不是“将参数传递给一个将其设置为全局的函数,这样您就不需要传递它了”例如)。你知道吗

缺点是1/只有您自己的代码可以使用这些设置,2/它使您的代码依赖于这些设置(有时可能是PITA)。你知道吗

最后,给定“verbose”名称,我假设您希望配置程序调试/错误输出的详细级别。以一种标准的、可移植的和良好解耦的方式(这将解决上述这一特性的两个缺点)实现这一点的正确方法是use the stdlib's logging package。此软件包旨在将记录器的使用(在“库”代码中,使用logger.log(level, msg, ...)或其快捷方式之一)与日志配置(特定于应用程序/安装)分离开来。一开始它需要一点学习,但从经验来看,它的时间花得很好,实际上很快节省了时间。你知道吗

相关问题 更多 >

    热门问题