代码之家  ›  专栏  ›  技术社区  ›  yatu Sayali Sonawane

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

  •  0
  • yatu Sayali Sonawane  · 技术社区  · 6 年前

    我只想让函数接收到的参数对文件中的所有其他函数都是可访问的,或者设置为全局变量,而不必将其作为所有其他函数的参数传递。到目前为止,我试图将其设置为全局变量,但显然不能将参数也设置为全局变量。

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

    def add(a,b, verbose):
        global verbose
        return a + b
    
    result = add(2,3, False)
    print(verbose)
    

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

    2 回复  |  直到 6 年前
        1
  •  2
  •   khelwood Muhammed Elsayed.radwan    6 年前

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

    def add(a,b, verbose_value):
        global verbose
        verbose = verbose_value
        return a + b
    
    result = add(2,3, False)
    print(verbose)
    
        2
  •  1
  •   bruno desthuilliers    6 年前

    第一点,作为一般规则,全局函数是邪恶的,或者更确切地说,应该尽可能避免从函数内部对全局函数进行变异或更糟的重新绑定。

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

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

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

    最后,给定“verbose”名称,我假设您希望配置程序调试/错误输出的详细级别。以一种标准的、可移植的和良好分离的方式来实现这一点的正确方法是 use the stdlib's logging package 是的。这个包的目的是分离logger的使用(在“library”代码中,使用 logger.log(level, msg, ...) 或者它的一个快捷方式)记录配置(这是特定于应用程序/安装的)。一开始需要一些学习,但从经验来看,时间花得很好,而且很快 保存 时间。