关于python中全局变量的困惑

Ben*_*Ben 11 python global-variables python-import

我是python的新手,所以请原谅可能是一个非常愚蠢的问题.

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

我有两个脚本:

one.py:
-------

def my_function():
  if _debug:
    print "debugging!"


two.py:
-------

from one import *
_debug = False

my_function()
Run Code Online (Sandbox Code Playgroud)

运行two.py会生成错误:

NameError: global name '_debug' is not defined
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么?

Jam*_*ady 16

我担心的问题不仅仅是领先的下划线.

当您调用时my_function(),它仍然不会debug在其命名空间中包含您的变量,除非您从中导入它two.py.

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

一种解决方案是创建一个简单的第三个模块,它定义了这样的"常量",可以从任何地方安全地导入,例如:

constants.py
------------
debug = True

one.py
------
from constants import debug
#...

two.py
------
from constants import debug
#...
Run Code Online (Sandbox Code Playgroud)

但是,我建议只使用内置的日志记录模块 - 为什么不呢?它易于配置,使用更简单,可靠,灵活且可扩展.


kgi*_*kis 5

以下划线开头的名称不会导入

from one import *
Run Code Online (Sandbox Code Playgroud)