(一)
預設引數:(預設引數)預設引數必須寫在後面,可以不指定引數名,但是順序要保證,否則要指定引數名。
預設值如果不傳參,則使用預設值。
在python中如果元組裡面只有乙個元素,元素後面不加逗號,輸出的結果就是不是元組。
(二)*arge被稱為不定長引數(可變引數):
1、可變引數允許傳入0個或任意個引數,這些可變引數在函式呼叫時自動 組裝為乙個tuple(元組)
2、在引數*args裡接受的元素將組成元組,最好寫在最後,因為他將從開始直到最後的所有元素組成元組。
3、可以傳遞乙個元祖或列表,但是他將元組或列表組成元組中的第乙個元素;如果在傳參過程中在arge前面加個*,就是將元組中的元素傳過去,在輸出的值就是元組,而不是元組中的元素。
4、遍歷元組中的元素,可用兩個迴圈將其遍歷。
(三)**kw 關鍵字引數:關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict(字典)
1、只接受鍵值對的形式:引數=值 的形式傳參
2、如果值是乙個字典,傳參時加上**。
3、在python中定義函式,可用必選引數,預設引數,可變引數,關鍵字引數和命名關鍵字引數,這五種引數中除了可變引數和命名關鍵字引數不能組合使用,其他均可。引數定義的順序必須是:必選引數,預設引數,可變引數/命名關鍵字引數和關鍵字引數。
4、預設引數一定要用不可變物件,如果是可變物件,程式執行時會有邏輯錯誤。
(四)1、global :表示在此函式中使用全域性變數,如果沒有此宣告,下面的變數a就是區域性變數
2、匿名函式:使用lambda來建立;lambda函式的語法只包含乙個語句
語法:lambda [引數]:表示式
sum=lambda arg1,arg2:arg1+arg2;
3、lambda的主體是乙個表示式,而不是乙個**塊。僅僅在lambda表示式中封裝有限的邏輯進去
4、lambda函式擁有自己的名字空間,且不能訪問自有引數列表之外或全域性名字空間裡的引數
5、python中,有幾個定義好的全域性函式方便使用:filter(過濾)、map、reduce
在使用reduce需要匯入模組:from functools import reduce
for……in……同等於map
for……in……if同等於filter
內部函式:
1、如果在乙個內部函式裡,對在外部作用域(但不是在全域性作用域)的變數進行引用,那麼內部就被認為是閉包。
2、在全域性域,函式物件被函式名引用著,它接收引數a,b,計算這兩個引數的和作為返回值。
3、所謂第一類物件,意思是可以用識別符號給物件命名,並且物件可以被當做資料處理,例如賦值、作為引數傳遞給函式,或者作為返回值return等。
4、所謂閉包:就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件。閉包最重要的使用價值在於:封存函式執行的上下文環境。
Go語言的函式06 閉包函式
package main import fmt 李逵和武松的study方法的邏輯是幾乎一模一樣的 然而為了分別儲存兩人的學習進度,需要開闢兩個全域性變數,函式內部的需要使用兩條分支結構才能完成業務邏輯 如果是108將都來學習。此時 的可復用性很差 var progress int func stud...
函式閉包python中的閉包
本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正 單簡說,閉包就是根據不同的置配息信到得不同的結果 再來看看專業的解釋 閉包 closure 是詞法閉包 lexical closure 的簡稱,是引用了由自變數的函式。這個被引用的由自變數將和這個函式一起存在,即使已離開了造創它...
python函式巢狀閉包 閉包與巢狀函式
沒有區別,因為沒有閉合函式,不是真的。有closures,但這一術語指的是在外部和內部範圍中儲存變數的技術。只剩下巢狀函式。在 巢狀函式只是在另乙個函式內部定義的函式 def outer def inner 當outer 定義了乙個inner 然後也使用的名稱,則該變數名稱為閉包單元,儲存在inne...