代码之家  ›  专栏  ›  技术社区  ›  Ben

python中全局变量的困惑

  •  11
  • Ben  · 技术社区  · 17 年前

    我是python新手,所以请原谅这个可能很愚蠢的问题。

    基本上,我有一个名为_debug的全局变量,用于确定脚本是否应该输出调试信息。我的问题是,我无法将其设置在与使用它的python脚本不同的python脚本中。

    我有两个脚本:

    one.py:
    -------
    
    def my_function():
      if _debug:
        print "debugging!"
    
    
    two.py:
    -------
    
    from one import *
    _debug = False
    
    my_function()
    

    NameError: global name '_debug' is not defined
    

    4 回复  |  直到 13 年前
        1
  •  16
  •   James Brady    17 年前

    恐怕除了前导下划线之外,还有更多的问题。

    当你打电话的时候 my_function() debug 变量位于其命名空间中,除非您从以下位置导入它 two.py .

    当然,这样做意味着你最终会得到循环依赖( one.py -> two.py -> one.py ),你会得到 NameError 除非你重构了导入和声明各种东西的地方。

    constants.py
    ------------
    debug = True
    
    one.py
    ------
    from constants import debug
    #...
    
    two.py
    ------
    from constants import debug
    #...
    

    但是,我建议只使用内置 logging 模块-为什么不呢?它易于配置,使用更简单,可靠,灵活和可扩展。

        2
  •  5
  •   kgiannakakis    17 年前

    from one import *
    
        3
  •  4
  •   unbeknown    17 年前

    您还可以使用 __debug__ 用于调试的变量。如果解释器不是用-O选项启动的,这是真的。断言语句也可能有所帮助。

        4
  •  1
  •   Paul Fisher    17 年前

    my_function one _debug 在中找不到 一个人