這里都記錄一些遇到的洽议,暫時沒解決的問題。
看到一個上面的錯誤朋凉,但是不明白錯誤的根本原因蒲赂。
python 中g(shù)lobal用的比較少(應(yīng)該說在工作中沒有用過)。global 最常見的場景應(yīng)該是一個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
擴(kuò)展閱讀
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 也沒什么關(guān)系呢...