課程內(nèi)容
Python入門課程N(yùn)O58課 函數(shù)的可變參數(shù)
“可變”是指參數(shù)的數(shù)目是變化的,不確定的。在Python中定義函數(shù)時(shí),給形參加上一個(gè)"*"或"**"的修飾符,那么該形參就是一個(gè)可變形參。
使用*將實(shí)參收集為元組:
在Python中定義函數(shù)時(shí),在形參前面加一個(gè)"*"操作符,那么在執(zhí)行函數(shù)調(diào)用時(shí),Python解釋器會(huì)將該參數(shù)位置處開始的實(shí)參全部收集到一個(gè)元組當(dāng)中。舉例說明:
由于可變形參是從左到右進(jìn)行參數(shù)的收集,所以我們?cè)诙x函數(shù)時(shí),通常是將可變形參置于普通形參的右邊。
使用**將實(shí)參收集為字典:
定義函數(shù)時(shí),使用**操作符對(duì)形參進(jìn)行修飾,在調(diào)用函數(shù)時(shí),Python會(huì)將該參數(shù)位置處開始的實(shí)參收集為字典類型。但是必須以關(guān)鍵字參數(shù)的方式來進(jìn)行調(diào)用。我們將上面的例子修改一下,如下:
*args與**kwargs
*args 與 **kwargs是可變形參名稱的通用寫法,前者用來將實(shí)參打包成一個(gè)元組類型,后者用來將實(shí)參打包成一個(gè)字典類型。我們建議在實(shí)際定義函數(shù)的過程中,可以沿用這種通用的寫法,也可以自行定義可變參數(shù)的名稱。
對(duì)實(shí)參進(jìn)行解包:
在定義函數(shù)時(shí)使用*或**,是將實(shí)參收集到元組或字典中。而在調(diào)用函數(shù)時(shí)使用*或**來進(jìn)行修飾,則是將實(shí)參進(jìn)行解包。所謂的解包,就是將數(shù)據(jù)集合中的元素取出,然后賦值給對(duì)應(yīng)的參數(shù)。通常情況下我們用使用*對(duì)可迭代對(duì)象進(jìn)行解包,使用**對(duì)字典進(jìn)行解包
使用*對(duì)可迭代對(duì)象進(jìn)行解包:迄今為止學(xué)過的可迭代對(duì)象有:字符串類型,列表,元組,字典,集合。在對(duì)字典,集合等類型進(jìn)行解包時(shí),解包出的元素為對(duì)應(yīng)的鍵名。在實(shí)際開發(fā)中,通常使用**操作符對(duì)字典進(jìn)行解包。
使用**對(duì)字典進(jìn)行解包:對(duì)字典進(jìn)行解包時(shí),字典中的鍵名與函數(shù)中的形參名一一對(duì)應(yīng),實(shí)參即該鍵名所對(duì)應(yīng)的鍵值。
以下舉例說明:
使用*操作符定義可變參數(shù)時(shí),Python會(huì)將該形參位置處開始的實(shí)參收集到元組中。
使用**操作符定義可變參數(shù)時(shí),Python會(huì)將該形參位置處開始的實(shí)參收集到字典中。

- 上一篇
Python入門課程N(yùn)O57課 函數(shù)參數(shù)詳解
參數(shù)的分類:函數(shù)的參數(shù)分類兩種,位置參數(shù)和關(guān)鍵字參數(shù)。位置參數(shù)與參數(shù)的位置相關(guān),這里的位置是指定義函數(shù)時(shí)的從左到右的參數(shù)排列順序。在調(diào)用函數(shù)時(shí),會(huì)自動(dòng)將實(shí)參與形參的位置對(duì)應(yīng)起來。關(guān)鍵字參數(shù)是指調(diào)用函數(shù)時(shí),將形參名當(dāng)做鍵名,將實(shí)參當(dāng)做鍵值,以鍵名=鍵值的語法
- 下一篇
Python入門課程N(yùn)O59課 匿名函數(shù)lambda表達(dá)式
匿名函數(shù),也就是沒有函數(shù)名的函數(shù)。在Python中,通過lambda表達(dá)式來定義匿名函數(shù)。與之對(duì)應(yīng)的是具名函數(shù)。具名函數(shù)即為有函數(shù)名的函數(shù)。通過def來定義的函數(shù),就叫具名函數(shù)。也就是我們之前講解的函數(shù)。lambda表達(dá)式的語法結(jié)構(gòu):lambda parameters: expression舉例說明:由于