【学习笔记】34、函数是Python的头等对象
函數是Python的頭等對象
我們可以把函數分配給變量、存儲在數據結構中、作為參數傳遞給其他函數,甚至作為其他函數的返回值等。
函數是對象
Python程序中所有的數據都是由對象或者對象之間的關系來表示的。
字符串、列表、模塊等都是對象,函數也不例外。
?
函數對象及其名稱是相互獨立的實體。
?
Python在創建函數時為每一個函數附加一個用于調試的字符串標識符,使用“__name__”屬性可以訪問這個內部標識符。
雖然函數的“__name__”是yell,但是已經無法使用這個名稱在代碼中訪問函數對象了,名稱標識符僅僅用來輔助調試,指向函數的變量和函數本身實際上是彼此獨立的。
函數可存儲在數據結構中
由于函數是頭等對象,因此可以像其他對象一樣存儲在數據結構中。
訪問存儲在列表中函數對象與訪問其他類型的對象是一樣的。
?
函數可傳遞給其他函數
由于函數是對象,因此可以將其作為參數傳遞給其他函數。
?
將函數對象作為參數傳遞給其他函數的功能非常強大,可以用來將程序中的行為抽象出來并傳遞出去。能接受其他函數作為參數的函數被稱為“高階函數”。Python中具有代表性的高階函數是內置的map函數,map接受一個函數對象和一個可迭代的對象,然后在可迭代對象中的每一個元素上調用該函數來生成結果。
函數可以嵌套
Python允許函數中定義函數,這種稱之為“嵌套函數”或“內部函數”。
?
如果要在外部訪問嵌套的內部函數,需要將內部函數返回給父函數的調用者。
?
函數可捕捉局部狀態
內部函數不僅可以從父函數返回,還可以捕獲并攜帶父函數的某些狀態。
?
內部函數沒有text參數,但是仍可以訪問在父函數中定義的text參數,這種行為就稱之為“詞法閉包”(lexical colsure),簡稱閉包。閉包在程序流不在閉包范圍內的情況下,也能記住封閉作用域(enclosing scope)中的值。
實際上,這就意味著函數不僅可以返回行為,還可以預先配置這些行為。
?
對象也可作為函數使用
Python中所有的函數都是對象,反之則不成立,有些對象不是函數,但是也可以調用,因此在許多情況下可以將其當成函數來看待。
如果一個對象是可調用的,說明它可以使用圓括號函數調用的語法,甚至可以傳入參數,這些都靠“__call__”方法完成。
?
一個對象是否可以調用,Python內置了callable函數。
?
?
總結
以上是生活随笔為你收集整理的【学习笔记】34、函数是Python的头等对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学习笔记】33、具有Python特色的
- 下一篇: 【Python 爬虫】 1、爬虫基础概念