函數的定義
def 函數名([參數列表]):'''注釋'''函數體
注意事項
-
函數形參不需要聲明類型,可以使用
return
語句在結束函數執行的同時返回任意類型的值,函數返回值類型與return語句返回表達式i的類型一致 -
即使該函數不需要接受任何參數,也必須保留一堆空的圓括號
-
函數體相對于def關鍵字必須保持一定的空格縮進
-
無論
return
語句出現在函數的什么位置,一旦得到執行將直接結束函數的執行 -
如果函數沒有
return
語句、有return
語句但是沒有執行到、執行了不返回任何值的return
語句,解釋器都會認為該函數以return None
結束,即返回空值 -
調用函數時向其傳遞實參,將實參的引用傳遞給形參,但是在將要修改形參的時候將會復制一份形參,而不會改變實參。但是如果實參是可變序列,則對形參對應序列的修改將會修改實參的序列
-
實參和形參的順序必須嚴格一致,而且實參和形參的數量必須相同
-
按照形參名輸入實參,此時參數之間的順序可以任意調整
-
默認值參數右邊都不能再出現沒有默認值的普通位置參數
-
調用函數時是否為默認參數傳遞實參是可選的,即是否傳入參數都可以
-
可以使用
函數名.__defaults__
隨時查看函數所有默認值參數的當前值 -
多次調用函數并且不為默認值參數傳遞值時,默認值參數只在定義時進行一次解釋和初始化,對于列表、字典這樣可變類型的默認值參數,這一點可能會導致很嚴重的邏輯錯誤。
-
可變長參數:星號加上參數可以用來接受多個實參并將其放入一個元組中
-
可變長多參數:兩個星號加參數可以用來接受多個關鍵參數并將其返給字典中
-
位于
*parameter
或單獨一個*
之后的所有參數都只能以關鍵詞參數的形式進行傳值,不接受其他任何形式的傳值。 -
傳遞參數時的序列解包:在實參序列前加一個星號將其捷豹,然后傳遞給多個單變量形參
-
如果函數實參是字典,可以在前面加上兩個星號進行解包,等價于關鍵實參
-
我們可以標注函數參數和返回值類型,可是這個標注如果我們自己不寫斷言的話沒什么用
-
局部變量和全局變量:可以在函數體中直接使用全局變量,前提是不進行更改,一旦進行更改將會創建局部變量
-
如果要在函數體中使用全局變量需要在函數體中進行聲明
全局變量:global