将功能参数设置为全局变量

时间:2018-07-13 10:39:30

标签: python function

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

这里是我想要的简单例子:

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

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

在我的情况下,被调用函数在另一个文件上,因此无法预先将详细设置为全局。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

首先,一般来说,全局变量是邪恶的-更确切地说,应尽可能避免从函数内部更改或更糟地重新绑定全局变量。

第二点:在Python中,“全局”实际上意味着“模块级”-没有“进程级”全局(请注意,这是基于上面第一点的设计选择)

第三点:对于一般的用例(应用程序设置),“较少危害”的方法是使所有模块都使用设置系统,而不是“将参数传递给将其设置为全局功能的函数”不需要传递”,您的模块只需导入设置并从那里读取参数值(例如django设置)。

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

最后,给定“冗长”的名称,我假设您要配置程序调试/错误输出的详细程度。以标准的,可移植的和良好分离的方式(将解决上述两个缺点,解决此功能)的正确方法是使用use the stdlib's logging package。此软件包旨在将记录器的使用(在“库”代码中,使用logger.log(level, msg, ...)或其快捷方式之一)与日志记录配置(特定于应用程序/安装)分开。首先需要进行一些学习,但是根据经验,它要花很多时间,实际上节省时间很快。