python中奇怪的可见性范围行为

时间:2013-08-01 13:38:47

标签: python python-2.7 visibility

在范围可见性方面有一种奇怪的行为,我在手册中找不到这一点。 所以,这是我的代码简化为基础。

from server import WWW_DOCUMENT_ROOT

def write_config(project_abs_path):
    print WWW_DOCUMENT_ROOT

    # WWW_DOCUMENT_ROOT = 'A'

在这里,如果最后一行 - 作业 - 被注释掉,print WWW_DOCUMENT_ROOT工作正常并打印全局值。 如果取消注释分配声明 - print WWW_DOCUMENT_ROOT停止工作并说'WWW_DOCUMENT_ROOT' referenced before assignment

显然问题是用global WWW_DOCUMENT_ROOT语句修复的,但是为什么它的行为不同取决于是否要在代码中稍后分配变量。那是不稳定和不明显的,或者我在这里没有得到什么。为什么会这样?

python 2.7.3

1 个答案:

答案 0 :(得分:0)

您在函数中引用的任何名称都被视为全局,直到您为其指定

编译器在函数中查看赋值,并将名称标记为 local 变量。作为本地名称,WWW_DOCUMENT_ROOT在您尝试打印时没有任何价值。

如果您希望分配给global来影响全局变量,请使用WWW_DOCUMENT_ROOT关键字:

def write_config(project_abs_path):
    global WWW_DOCUMENT_ROOT 
    print WWW_DOCUMENT_ROOT

    WWW_DOCUMENT_ROOT = 'A'