global:顧名思義,表示全局變量。即這個變量在python中處于最高層次上,也就是這個變量的定義層次最高,而不是在函數或類中。 local:局部變量,被定義在函數之中。 nonlocal:這是一個相對的概念。在python中,函數內部可以嵌套定義內部函數,這樣函數內部的變量相對于函數內部的內嵌函數來講就是nonlocal的。 下面,給出相關的程序來說明,首先看一下全局和局部變量: 代碼如下: x = 1 y = 2 def foo(x): print(x) print(y) print('***********') x = 3 global y y = 3 print(x) print(y) print('***********') foo(x) print(x) print(y)
在上述程序中,定義了兩個全局變量x和y, 在函數foo內部,也定義了一個局部變量x。根據運行結果可知,在foo內部,變量x是真正的局部變量。因為對其所做的修改并沒有對全局變量x產生影響。另外,如果在foo內部需要使用全局變量,則需要使用global關鍵字。global y的意圖就是聲明變量y為外部聲明過的全局變量y。所以,在foo內部對y進行修改后,在foo外部仍然有影響。因為foo修改的是全局變量。 再來看一下nonlocal: 代碼如下: def out(): z = 3 def inner(): nonlocal z z = 4 print('inner function and z = {0}'.format(z)) inner() print('out function and z = {0}'.format(z)) out() #********** #運行結果 inner function and z = 4 out function and z = 4