1·def是可執行的代碼函數
Python的函數是有一個新的語句編寫的,即def。不像C這樣的編譯語言,def 其實是一個可執行的語句--函數並不存在,直到Python運行了def後才存在。在典型的操做中,def語句在模塊文件中編寫,並天然而然地在模塊文件第一次被導入地時候生成定義的函數。spa
2·def建立了一個對象並將其賦值給某一個變量名對象
當Python運行到def語句時,它將會生成一個新的函數對象並將其賦值給這個函數名。函數名就變成了某一個函數的引用。函數對象能夠賦值給其餘的變量名,保存在列表之中。函數也能夠經過lambda表達式來建立接口
3·return將一個結果對象發送給調用者內存
當函數被調用時,其調用者就中止運行知道這個函數完成了它的工做,這以後函數纔將控制權返回調用者。(#1A #2func() #3B 先執行A語句,再執行func(),最後執行B語句)函數時經過return語句將計算獲得的值傳遞給調用者的,返回值成爲函數調用的結果作用域
4·global聲明瞭一個模塊級的變量並賦值編譯
在默認狀況下,全部在一個函數中被賦值的對象,是這個函數的本地變量(local)(全部本地變量都會在函數調用時出現,並在函數退出時消失),而且僅在這個函數運行的過程當中存在。爲了分配一個能夠在整個模塊中均可以使用的變量名,函數須要在global語句中將它列舉出來。一般狀況下,變量名每每須要關注它的做用域(也就是說變量存儲的地方)。而且是經過實賦值語句將變量名綁定至做用域的變量
5·函數是經過賦值(對象引用)傳遞的lambda
在Python中,參數經過賦值傳遞給了函數(也就是說,就像咱們所學過的,使用對象引用)Python的模式中,調用者及函數經過引用共享對象,可是不須要別名。改變函數中的參數名並不會改變調用者中的變量名,可是改變傳遞的可變對象能夠改變調用者共享的那個對象。引用
6·參數,返回值以及變量並非聲明
就像在Python中全部的同樣,在函數中並無類型約束。實際上,從一開始函數就不須要聲明:能夠傳遞任意類型的參數給函數,函數也能夠返回任意類型的對象。其結果就是,函數經常能夠用在不少類型的對象身上,任意支持兼容接口(方法和表達式)的隨想都能使用,不管它們是什麼類型。
7·補充
Python中的return語句能夠在函數主體中的任何地方出現。它表示函數調用的結束,並將結果返回至函數調用處。return語句包含一個對象表達式,這個對象給出的函數的結果。return語句是可選的。若是它沒有出現,那麼函數將會在控制流執行完函數主體時結束。從技術角度講,一個沒有返回值的函數自動返回了none對象,可是這個值每每是被忽略掉的。
Python的def語句其實是一個可執行的語句:當它運行的時候,它建立一個新的函數對象並將其賦值給一個變量名(Python中全部的語句都是實時運行的,沒有像獨立的編譯時間這樣的流程)由於它是一個語句,一個def能夠出如今任一語句能夠出現的地方--甚至是嵌套在其餘語句中。例如,儘管def每每是包含在模塊文件中,並在模塊導入時運行,函數仍是能夠經過嵌套在其餘語句中去實現不一樣的函數定義,這樣也是徹底能夠的。
它在運行時簡單的給一個變量名進行賦值。與C這樣的編譯語言不一樣,Python函數子啊程序記念性以前並不須要所有定義。更準確地講,def在運行時才進行評估,而在def之中的代碼在函數調用以後纔會評估。
由於函數的定義是實時發生的,因此對於函數名來講並無什麼特別之處。關鍵之處在於函數名所引用的那個對象。Python中的函數僅僅是對象,在程序執行時它清楚的記錄在內存中,除了函數調用外,函數容許任意的屬性附加到記錄信息以供隨後使用。