1. 在函式內部引用全域性的變數,有同名區域性變數
疏忽了就會出現錯誤,比如:
#file1.py
var = 1
def fun():
print var
var = 200
print fun()
#file2.py
var = 1
def fun():
var = var + 1
return var
print fun()
這兩個函式都會報錯unboundlocalerror: local variable 'var' referenced before assignment
原因:在未被賦值之前引用的錯誤。因為在函式的內部,直譯器探測到var被重新賦值了,所以var成為了區域性變數,但是在沒有被賦值之前就想使用var,便會出現這個錯誤。
解決:在函式內部新增 globals var 但執行函式後全域性的var也會被修改。
2. 區域性變數同模組某函式同名
locals() 和 globals()
global 和 globals() 是不同的,global 是關鍵字用來宣告乙個區域性變數為全域性變數。globals() 和 locals() 提供了基於字典的訪問全域性和區域性變數的方式
比如:如果函式1內需要定義乙個區域性變數,名字另乙個函式2相同,但又要在函式1內引用這個函式2。
def var():
pass
def f2():
var = 'just a string'
f1 = globals()['var']
print var
return type(f1)
print f2()
# just a string
# 原文:
python 全域性變數
應該盡量避免使用全域性變數。不同的模組都可以自由的訪問全域性變數,可能會導致全域性變數的不可預知性。對全域性變數,如果程式設計師甲修改了 a的值,程式設計師乙同時也要使用 a,這時可能導致程式中的錯誤。這種錯誤是很難發現和更正的。全域性變數降低了函式或模組之間的通用性,不同的函式或模組都要依賴於全域...
Python 全域性變數
應該盡量避免使用全域性變數。不同的模組都可以自由的訪問全域性變數,可能會導致全域性變數的不可預知性。對全域性變數,如果程式設計師甲修改了 a的值,程式設計師乙同時也要使用 a,這時可能導致程式中的錯誤。這種錯誤是很難發現和更正的。全域性變數降低了函式或模組之間的通用性,不同的函式或模組都要依賴於全域...
python全域性變數
python中global關鍵字主要作用是宣告變數的作用域。在c語言中,由於變數一定是先宣告,後使用,所以我們可以清楚的知道,現在使用的變數是全域性還是區域性,比如 cpp view plain copy inta 5 void test void void test1 void void main...