本篇記錄一個python問題,在函數中使用全局變量
與C++相仿,python也有全局變量,並且在函數外定義的變量就是全局變量:
a = 5 # 全局變量
def func():
return
在函數中可以直接讀取全局變量的值:
a = 5 # 全局變量
print(id(a))
def func():
print(a)
print(id(a))
''' 94648897326528 5 94648897326528 '''
在函數中不能直接修改全局變量的值,如下所示:
a = 5 # 全局變量
def func():
a=a+1
func()
將報UnboundLocalError: local variable 'a' referenced before assignment
,也就是說func
函數認為a
是一個局部變量,但沒有被賦值。
正確做法是在函數中使用global
關鍵字提示編譯器a
是一個已定義的全局變量:
a = 5 # 全局變量
def func():
global a
a=a+1 # 6
func()
print(a)
''' 6 '''
可以看到,全局變量a
被函數修改了。
與C++類似,可以在函數的局部作用域下,定義與全局變量同名的局部變量:
a = 5 # 全局變量
def func():
a=5
a=a+1 # 6
print(a)
func()
print(a)
''' 6 5 '''
局部變量被改變不會影響同名全局變量的值(因為它們的地址不同。)