为什么这个python代码可以工作?

为什么这个python代码可以工作?,python,module,visibility,globals,Python,Module,Visibility,Globals,我编写了一个简单的python模块,它有以下代码: _log = logging.getLogger("mymodule") _started = False def set_log_level(level): _log.setLevel(level) if not _started: _hdlr = logging.FileHandler('mymodule.log') 当我调用set_log_level时,程序失败,因为找不到符号_start。这是正常的,

我编写了一个简单的python模块,它有以下代码:

_log = logging.getLogger("mymodule")
_started = False

def set_log_level(level):
    _log.setLevel(level)
    if not _started:
        _hdlr = logging.FileHandler('mymodule.log')

当我调用set_log_level时,程序失败,因为找不到符号_start。这是正常的,因为方法中缺少全局_start。但我的问题是:symbol _log与_start具有相同的可见性,那么为什么可以找到这个符号?

我认为您的程序失败的原因并不是您所想的。除非实际修改该变量,否则无需在函数中使用全局声明。否则,您将需要对该名称空间中的某些内容的每次访问使用global,甚至调用其他函数


我不确定运行程序时实际发生了什么-也许您可以提供问题的回溯或描述。

我不认为您的程序失败的原因是您认为的。除非实际修改该变量,否则无需在函数中使用全局声明。否则,您将需要对该名称空间中的某些内容的每次访问使用global,甚至调用其他函数


我不确定运行程序时实际会发生什么-也许您可以提供问题的回溯或描述。

如果我在Python 2.7.1下运行此程序,则不会出现错误。我添加了一行set\u log\u level3。它应该不会失败。这是全部密码吗?这是你的全部密码吗?在实际运行的代码中是否有类似于_start=True的内容?Python函数中存在赋值会对全局函数产生阴影,即使赋值在第一次使用后出现。如果在Python 2.7.1下运行此函数,则不会出现错误。我添加了一行set\u log\u level3。它应该不会失败。这是全部密码吗?这是你的全部密码吗?在实际运行的代码中是否有类似于_start=True的内容?Python函数中存在赋值将对全局函数产生阴影,即使该赋值在第一次使用后出现。