Python中全域性變數的引用與修改之格式影響

2022-06-18 03:48:11 字數 933 閱讀 8384

先來看下面的**及執行結果:

a = 1

b = [2,3]

def nums():

a = 2

b[0] = 0

print(a)

print(b)

print(a)

print(b)

nums()

print(a)

print(b)

結果:

1

[2, 3]

2[0, 3]

1[0, 3]

對上面結果的分析:

函式 nums() 中重新定義了乙個變數 a ,這個 a 是區域性變數,與外面的全域性變數沒有關係,而全域性變數 列表 b 直接被引用過來進行修改了,同樣是全域性變數為什麼會有差別呢?

因為格式問題引發了歧義,容器型別的資料如,列表,字典,他們的修改和建立書寫格式全然不同,不會引發奇異,而數字,字串型別變數的定義和修改都是用 = 鏈結,引發了格式上的歧義,所以,當python直譯器遇到函式中的 「a = 2」這種格式時,不知道是 「引用全域性變數a修改為2」 還是 「定義乙個等於 2 的變數」 ,從而引發歧義,為了確保全域性變數對**其他部分產生更小的影響,python預設為第二種——重新定義乙個變數,來避免修改全域性變數對整體**產生其他未知影響。

綜上所述:

本質:格式引發的歧義問題

運用:對於字典,列表不會因為格式問題引發歧義的,不用管他;對於數字,字串來說,當引用與建立發生歧義時,python直譯器預設建立新的變數,若不想建立,只是想修改全域性變數,需要加global宣告,另外,如果只是單純的引用全域性變數,而不會產生歧義的,如 對於全域性變數 a 來說,b = a + 5,這裡只是單純的使用,不會產生格式上的歧義問題,也不需要加global。

**:

python中在方法中引用全域性變數

在外面定義了乙個變數 然後在python的乙個函式裡面引用這個變數,並改變它的值,結果報錯local variable referenced before assignment,如下 23 def printfilename strfilename if 23 print strfilename 2...

Python中全域性變數的引用與修改之格式影響

先來看下面的 及執行結果 a 1b 2 3 def nums a 2 b 0 0print a print b print a print b nums print a print b 結果 1 2 3 2 0,3 1 0 3 對上面結果的分析 函式 nums 中重新定義了乙個變數 a 這個 a 是...

函式中「引用」全域性變數和「修改」全域性變數的差別

以下程式中,函式中可以直接列印出全域性變數x,而無須使用關鍵字global html view plain copy print?x 1 def run print x if name main run 當在函式中需要修改全域性變數時,如果沒有global關鍵字則會出錯 python view pl...