Python區域性函式及用法詳解
導讀 | 區域性函式有哪些特徵,在使用時需要注意什麼呢?接下來就給讀者詳細介紹 Python 區域性函式的用法,對Python區域性函式相關知識感興趣的朋友跟隨小編一起看看吧 |
透過前面的學習我們知道,Python 函式內部可以定義變數,這樣就產生了區域性變數,有讀者可能會問,Python 函式內部能定義函式嗎?答案是肯定的。Python 支援在函式內部定義函式,此類函式又稱為區域性函式。
那麼,區域性函式有哪些特徵,在使用時需要注意什麼呢?接下來就給讀者詳細介紹 Python 區域性函式的用法。
首先,和區域性變數一樣,預設情況下區域性函式只能在其所在函式的作用域內使用。舉個例子:
#全域性函式 def outdef (): #區域性函式 def indef(): print(") #呼叫區域性函式 indef() #呼叫全域性函式 outdef()
程式執行結果為:
就如同全域性函式返回其區域性變數,就可以擴大該變數的作用域一樣,透過將區域性函式作為所在函式的返回值,也可以擴大區域性函式的使用範圍。例如,修改上面程式為:
#全域性函式 def outdef (): #區域性函式 def indef(): print("呼叫區域性函式") #呼叫區域性函式 return indef #呼叫全域性函式 new_indef = outdef() 呼叫全域性函式中的區域性函式 new_indef()
程式執行結果為:
呼叫區域性函式
因此,對於區域性函式的作用域,可以總結為:如果所在函式沒有返回區域性函式,則區域性函式的可用範圍僅限於所在函式內部;反之,如果所在函式將區域性函式作為返回值,則區域性函式的作用域就會擴大,既可以在所在函式內部使用,也可以在所在函式的作用域中使用。
以上面程式中的 outdef() 和 indef() 為例,如果 outdef() 不將 indef 作為返回值,則 indef() 只能在 outdef() 函式內部使用;反之,則 indef() 函式既可以在 outdef() 函式內部使用,也可以在 outdef() 函式的作用域,也就是全域性範圍內使用。
另外值得一提的是,如果區域性函式中定義有和所在函式中變數同名的變數,也會發生“遮蔽”的問題。例如:
#全域性函式 def outdef (): name = "所在函式中定義的 name 變數" #區域性函式 def indef(): print(name) name = "區域性函式中定義的 name 變數" indef() #呼叫全域性函式 outdef()
執行此程式,Python 直譯器會報如下錯誤:
UnboundLocalError: local variable 'name' referenced before assignment
此錯誤直譯過來的意思是“區域性變數 name 還沒定義就使用”。導致該錯誤的原因就在於,區域性函式 indef() 中定義的 name 變數遮蔽了所在函式 outdef() 中定義的 name 變數。再加上,indef() 函式中 name 變數的定義位於 print() 輸出語句之後,導致 print(name) 語句在執行時找不到定義的 name 變數,因此程式報錯。
由於這裡的 name 變數也是區域性變數,因此前面章節講解的 globals() 函式或者 globals 關鍵字,並不適用於解決此問題。這裡可以使用 Python 提供的 nonlocal 關鍵字。
例如,修改上面程式為:
#全域性函式 def outdef (): name = "所在函式中定義的 name 變數" #區域性函式 def indef(): nonlocal name print(name) #修改name變數的值 name = "區域性函式中定義的 name 變數" indef() #呼叫全域性函式 outdef()
程式執行結果為:
所在函式中定義的 name 變數
到此這篇關於Python區域性函式及用法(含nonlocal關鍵字)的文章就介紹到這了
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2933020/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- fcntl函式用法詳解函式
- Python assert斷言函式及用法Python函式
- python socket函式詳解Python函式
- test函式中的區域性變數函式變數
- 暫時性死區以及函式作用域函式
- 1.5.2 Python函式巢狀及作用域Python函式巢狀
- Python range() 函式用法Python函式
- Python排序函式用法Python排序函式
- 函式(三)作用域之變數作用域、函式巢狀中區域性函式作用域、預設值引數作用域函式變數巢狀
- 函式之定義及全域性變數&區域性變數&風溼理論函式變數
- Python中Numpy函式詳解Python函式
- Python-split()函式用法及簡單實現Python函式
- Linux中&&和&,|和||用法及區別詳解!Linux
- PHP 自定義函式用法及常用函式集合PHP函式
- python的os模組的常見函式及用途詳解Python函式
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- Python正規表示式 findall函式詳解Python函式
- Python中可迭代物件、迭代器以及iter()函式的兩個用法詳解Python物件函式
- Python self用法詳解Python
- StretchBlt函式和BitBlt函式的區別和用法函式
- python中zip()函式的用法Python函式
- Python3 range() 函式用法Python函式
- Dotnet的區域性函式和委託的對比函式
- Python隨機函式random使用詳解Python隨機函式random
- Oracle中的正規表示式(及函式)詳解Oracle函式
- hive 的函式 lateral view 用法詳解 | 附pdf下載Hive函式View
- Python時間處理常用模組及用法詳解!Python
- 區域性異常因子(Local Outlier Factor, LOF)演算法詳解及實驗演算法
- Java內部類詳解--區域性內部類Java
- Python 偏函式用法全方位解析Python函式
- Python中的split()函式的用法Python函式
- Python函式用法和底層分析Python函式
- python sorted()函式的引數用法Python函式
- python函式符號sympy的用法Python函式符號
- PyThon range()函式中for迴圈用法Python函式
- python函式每日一講 - float函式型別轉換詳解Python函式型別
- python IO模組【二】:open函式詳解Python函式
- python函式作用域簡介Python函式