Python全局變量和局部變量
阿新 • • 發佈:2017-11-29
pytho class append logs ble 錯誤信息 嵌套 eba python
123
全局變量和局部變量
定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。
局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序範圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。如下實例:
total = 0; # 這是一個全局變量 # 可寫函數說明 def sum( arg1, arg2 ): #返回2個參數的和." total = arg1 + arg2; # total在這裏是局部變量. #在函數中 如果對一個和全局變量名相同的變量進行=value的時候,默認是定義一個變量 #只不過這個變量的名字和全局變量的名字相同罷了 print ("函數內是局部變量 : ", total) return total; #調用sum函數 sum( 10, 20 ); print ("函數外是全局變量 : ", total)
以上實例輸出結果:
函數內是局部變量 : 30
函數外是全局變量 : 0
global 和 nonlocal關鍵字
global
當內部作用域想修改外部作用域的變量時,就要用到global和nonlocal關鍵字了。
以下實例修改全局變量 num:
num = 1
def fun1():
global num # 使用global用來對一個全局變量的聲明,那麽這個函數中的num就不是定義一個局部變量,而是
#對全局變量進行修改
print(num)
num = 123
print(num)
fun1()
以上實例輸出結果:
1
列表是當全局變量的
如下面的例子
nums = [11,22,33] infor = {"name":"wang"} def test(): #for num in nums: # print(num) nums.append(44) infor['age'] = 18 def test2(): print(nums) print(infor) test() #[11, 22, 33, 44] test2() #{'name': 'wang', 'age': 18}
nonlocal
如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量則需要 nonlocal 關鍵字了,如下實例:
def outer():
num = 10
def inner():
nonlocal num # nonlocal關鍵字聲明
num = 100
print(num)
inner()
print(num)
outer()
以上實例輸出結果:
100
100
另外有一種特殊情況,假設下面這段代碼被運行:
a = 10
def test():
a = a + 1
print(a)
test()
以上程序執行,報錯信息如下:
Traceback (most recent call last):
File "test.py", line 7, in <module>
test()
File "test.py", line 5, in test
a = a + 1
UnboundLocalError: local variable 'a' referenced before assignment
錯誤信息為局部作用域引用錯誤,因為 test 函數中的 a 使用的是局部,未定義,無法修改。
Python全局變量和局部變量