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