在python的變數使用中,經常會遇到這樣的錯誤:
local variable 'a' referenced before assignment
它的意思是:區域性變數「a」在賦值前就被引用了。
比如執行下面的**就會出現這樣的問題:
a =
3def
fuc():
print
(a) a = a +
1fuc(
)
但是如果把 a = a + 1 這一句刪除又不會出現上述問題了
a =
3def
fuc():
print
(a)fuc(
)
原來,在python中,a=3 定義了全域性變數a,作用域從定義處到**結束,在 a=3 以下的函式中是可以引用全域性變數a的,但如果要修改函式中與全域性變數同名的變數,則函式中的該變數就會變成區域性變數,在修改之前對該變數的引用自然會出現未分配或未定義的錯誤了。
如果確定要引用並修改全域性變數必須加上global關鍵字
a =
3def
fuc():
global a
print
(a) a=a+
1fuc(
)
注意要領:哪個函式需要修改全域性變數,在函式中宣告一下即可。
但在 if _name_ == 「main」:下,全域性變數是一直保持的
a =
3def
fuc():
global a
print
(a)# 1
a = a +
1if __name__ ==
"__main__"
:print
(a)# 2
a = a +
1 fuc(
)print
(a)# 3
輸出如下(python3環境下):
3
45
三個print執行的順序為:2, 1, 3 。
人生苦短,我用python~
全域性變數global與超全域性變數 GLOBALS
出錯行 mysqli query link,select from sys calendar where id id link為連線資料庫,此處為空。解決方法 link不能從global獲取,改為 globals link mysqli query globals link select from ...
python 全域性變數
應該盡量避免使用全域性變數。不同的模組都可以自由的訪問全域性變數,可能會導致全域性變數的不可預知性。對全域性變數,如果程式設計師甲修改了 a的值,程式設計師乙同時也要使用 a,這時可能導致程式中的錯誤。這種錯誤是很難發現和更正的。全域性變數降低了函式或模組之間的通用性,不同的函式或模組都要依賴於全域...
Python 全域性變數
應該盡量避免使用全域性變數。不同的模組都可以自由的訪問全域性變數,可能會導致全域性變數的不可預知性。對全域性變數,如果程式設計師甲修改了 a的值,程式設計師乙同時也要使用 a,這時可能導致程式中的錯誤。這種錯誤是很難發現和更正的。全域性變數降低了函式或模組之間的通用性,不同的函式或模組都要依賴於全域...