前邊文章我們介紹的函式都是定義在全域性環境中的,都是全域性函式。python還支援在函式體內定義函式,稱為區域性函式。
這篇文章著重說下區域性函式內的變數也會遮蔽(hide)
def fn():
name = '雞小西'
def local():
print(name) #unboundlocalerror: local variable 'name' referenced before assignment
name = 'lxc'
local()
fn()
上邊**,報錯了,同樣的道理,區域性變數遮蔽了區域性變數。在local函式中定義的區域性變數遮蔽了在fn函式中定義的區域性變數。
python提供了nonlocal關鍵字,通過nonlocal語句即可宣告訪問賦值語句只是訪問該函式所在函式內的區域性變數。
def fn():
name = '雞小西'
def local():
nonlocal name
print(name) # '雞小西'
name = 'lxc'
local()
print(name) # 'lxc'
fn()
上邊**,local函式中的name不在是定義新的區域性變數,而是訪問它所在函式(fn)內的name區域性變數 , 而之所以第二個輸出的是'lxc',因為local內部的name把外部name修改了,所以輸出的是修改之後的值。
def fn1():
name = 'lxc'
def fn2():
nonlocal name
name = 'hehe'
print(name) # 'hehe'
fn2()
print(name) # 'hehe'
fn1()
上邊**,如果在列印前同時定義nanlocal 關鍵字和 name 變數,輸出的都是被修改之後的name值 'hehe'。
nonlocal和前面介紹的global功能大致相同,區別在於:global用於宣告訪問全域性變數;而nonlocal用於宣告訪問當前函式所在函式內部的區域性變數。
python函式區域性變數
python簡單變數 不考慮類變數 分為兩類 函式內定義的區域性變數,和函式外定義的全域性變數 基本訪問規則 1.在函式內部,可以直接 讀取訪問全域性變數 注意唯讀 usr bin env python i 10 def f j i 1 讀取全域性變數i f print i d i 2.在函式內部,...
python函式和區域性變數
不帶引數的方法,攜帶返回值 defmethod return 不攜帶引數的方法 不帶引數的方法,攜帶返回值 defmethod1 print 不攜帶引數的方法 二者區別 函式呼叫 print method 只執行方法,不列印的話無法顯示資訊 method1 在方法中直接進行了列印,可以直接顯示,但是...
十三 區域性函式及用法 python
通過前面的學習我們知道,python 函式內部可以定義變數,這樣就產生了區域性變數,有讀者可能會問,python 函式內部能定義函式嗎?答案是肯定的。python 支援在函式內部定義函式,此類函式又稱為區域性函式。那麼,區域性函式有哪些特徵,在使用時需要注意什麼呢?接下來就給讀者詳細介紹 pytho...