1、引用python
使用到的全局變量只是做爲引用,不在函數中修改它的值的話,不須要加global關鍵字。如:函數
#! /usr/bin/python a = 1 b = [2, 3] def func(): if a == 1: print("a: %d" %a) for i in range(4): if i in b: print("%d in list b" %i) else: print("%d not in list b" %i) if __name__ == '__main__': func()
輸出結果:spa
能夠看出,不管是列表仍是變量,都是能夠直接引用的。code
2、修改blog
使用到的全局變量,須要在函數中修改的話,就涉及到歧義問題,如:class
#! /usr/bin/python a = 1 b = [2, 3] def func(): a = 2 print "in func a:", a b[0] = 1 print "in func b:", b if __name__ == '__main__': print "before func a:", a print "before func b:", b func() print "after func a:", a print "after func b:", b
輸出結果:變量
能夠看出,對於變量a,在函數func中"a = 2",由於存在既能夠表示引用全局變量a,也能夠表示建立一個新的局部變量的歧義,因此python默認指定建立一個新的局部變量來消除這一歧義,但對於列表b而言,"b[0] = 1"不存在這種歧義,所以直接修改了全局變量,可是若是改爲了"b = [3, 4]",那麼b也會變成局部變量。特別地,當在func中a = 2以前加入"if a == 1:"這一語句,腳本運行出錯,由於這一語句引入了全局變量,致使了"a = 1"這一語句沒法建立同名的局部變量。引用
所以,須要修改全局變量a,能夠在"a = 2"以前加入global a聲明,如:im
#! /usr/bin/python a = 1 b = [2, 3] def func(): global a a = 2 print "in func a:", a b[0] = 1 print "in func b:", b if __name__ == '__main__': print "before func a:", a print "before func b:", b func() print "after func a:", a print "after func b:", b
輸出結果:d3
結論:引用全局變量,不須要golbal聲明,修改全局變量,須要使用global聲明,特別地,列表、字典等若是隻是修改其中元素的值,能夠直接使用全局變量,不須要global聲明。