python 全局變量引用與修改

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聲明。

相關文章
相關標籤/搜索