函數身為第一類對象,它可以作為函數的返回值返回,現在我們來考慮如下的例子:
defprint_msg():
#print_msg是外圍函數
msg="zenofpython"
defprinter():
#printer是嵌套函數
print(msg)
returnprinteranother=print_msg()#輸出zenofpythonanother()
這段代碼和前面例子的效果完全一樣,同樣輸出"zenofpython"。不同的地方在于內部函數printer直接作為返回值返回了。
一般情況下,函數中的局部變量僅在函數的執行期間可用,一旦print_msg()執行過后,我們會認為msg變量將不再可用。然而,在這里我們發現print_msg執行完之后,在調用another的時候msg變量的值正常輸出了,這就是閉包的作用,閉包使得局部變量在函數外被訪問成為可能。看完這個例子,我們再來定義閉包,維基百科上的解釋是:
在計算機科學中,閉包(Closure)是詞法閉包(LexicalClosure)的簡稱,是引用了自由變量的函數。這個被引用的自由變量將和這
個函數一同存在,即使已經離開了創造它的環境也不例外。所以,有另一種說法認為閉包是由函數和與其相關的引用環境組合而成的實
體。
這里的another就是一個閉包,閉包本質上是一個函數,它有兩部分組成,printer函數和變量msg。閉包使得這些變量的值始終保存在內存中。
閉包,顧名思義,就是一個封閉的包裹,里面包裹著自由變量,就像在類里面定義的屬性值一樣,自由變量的可見范圍隨同包裹,哪里可以訪問到這個包裹,哪里就可以訪問到這個自由變量。
以上內容為大家介紹了python培訓之閉包函數是什么,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。