SyntaxWarning: name 'x' is assigned to before global declaration global x

这里都记录一些遇到的,暂时没解决的问题。

看到一个上面的错误,但是不明白错误的根本原因。
python 中global用的比较少(应该说在工作中没有用过)。global 最常见的场景应该是一个function中使用一个function 外定义好的变量var.

下面是我写了几个例子,有的报syntaxwarning, 有的就没有报。

Python 2.7.5
  • 例子:
# filename: a.py

x = 0

def func(a, b, c):
    if a == b:
        global x
        x = 10
    #elif b == c:
    #    global x
    #    x = 20

output

$ python a.py
无
  • 例子
# filename: a.py
x = 0

def func(a, b, c):
    if a == b:
        global x
        x = 10
    elif b == c:
        global x
        x = 20

输出

$ python a.py
a.py:9: SyntaxWarning: name 'x' is assigned to before global declaration
  global x
  • 例子
# filename: b.py
var = 'xxx'
if __name__ == '__main__':
    global var
    var = 'yyy'

output:

$ python b.py
无
  • 例子
var = 'xxx'
if __name__ == '__main__':
    global var
    var = 'yyy'

output

$ python b.py
b.py:4: SyntaxWarning: name 'var' is assigned to before global declaration
  global var
  • 例子
# filename: c.py
var = 'xxx'
def set_var():
    global var
    var = 'yyy'

if __name__ == '__main__':
    set_var()

output

$ python c.py
无 
  • 例子
# filename: d.py
var = 'xxx'
def set_var():
    global var
    var = 'yyy'

if __name__ == '__main__':
    set_var()
    var = 'yyy'

output

$ python d.py
无
  • 例子
# filename: e.py
x = 1

if __name__=="__main__":
    global x
    x = 2

output

$ python e.py 
python e.py
e.py:4: SyntaxWarning: name 'x' is assigned to before global declaration
  global x

扩展阅读

http://effbot.org/zone/syntaxwarning-name-assigned-to-before-global-declaration.htm
简介:
提到了这个问题,但是没解释清楚。

http://www.cnblogs.com/shadow21/p/3573918.html
简介:
解释“global是全局变量,如果前面定义了x的值,后面x的值就不能变了”。

这里好像涉及到python 命名空间的问题,但是和LEGB 也没什么关系呢...

你可能感兴趣的:(SyntaxWarning: name 'x' is assigned to before global declaration global x)