形參中使用*
和**
的原理可以參考《 * 與 ** 引數問題》這篇文章,講解非常詳細,本文只作乙個學習總結。
*args
是可變引數,args
接收的是乙個元組。比如可以向乙個函式傳入乙個列表(或迭代器),在形參中是使用*
就可以在函式中依次接收這個列表的每乙個元素;
**kw
是關鍵字引數,kw
接收的是乙個字典。比如在收集使用者資訊的時候,除了必填項之外,我們可以用**
來方便地接收那些未知個數的可選項。
在 lambda 表示式中使用*
和**
lambda 表示式可以當做乙個匿名函式,是函式都可以傳參,匿名函式的形參中也帶有使用*
和**
:
a = lambda *s: s + (2, 'g')
print(a('dd', 'de'))
# 列印出來的結果:('dd', 'de', 2, 'g')
lambda_test = lambda **args: args
print(lambda_test(usr='obama', age=18))
# 列印出來的結果:
眾所周知,python 中的可迭代物件分為集合資料型別(list、tuple、dict、set、str)和 generator 兩種。實參中的而我們常見的可迭代對映就是 dict 啦。
*
會獲取可迭代物件的 key(索引/鍵值)
由於獲取的是可迭代物件的 key,所以函式的形參可以為位置引數或可變引數。
def foo(n1, n2, n3, n4, n5):
return n1, n2, n3, n4, n5
d =
print(foo(*d))
# 列印得到的結果為 ('n1', 'n2', 'n3', 'n4', 'n5')
def fu(*n):
print(n)
d =
print(fu(*d))
# 列印得到的結果為 ('n1', 'n2', 'n3', 'n4', 'n5')
以上兩個例子中,將實參中的字典物件換成列表、元組或者字串物件,都是可以的,朋友們可以自己動手嘗試一下。
實參中的**
會獲取可迭代對映的 value
由於獲取的是可迭代物件的 value,所以函式的形參只能為關鍵字引數,即引數的個數和名稱都是固定的。
def foo(n1, n2, n3, n4, n5):
return n1, n2, n3, n4, n5
d =
print(foo(**d))
# 列印得到的結果為(5, 6, 7, 9, 8)
如果我們要呼叫的函式不是關鍵字形參:
def fu(*n):
print(n)
iterator = 'unique'
print(fu(**iterator))
如果呼叫函式中的關鍵字形參名稱與傳入的實參無法一一對應:
def foo(n1, n2, n3, n4, n5):
return n1, n2, n3, n4, n5
d =
print(foo(**d))
# 會報錯為:typeerror: foo() got an unexpected keyword argument 'n6'
參考:
多個實參,放到乙個元組裡面,以*開頭,可以傳多個引數;**是形參中按照關鍵字傳值把多餘的傳值以字典的方式呈現
*args:(表示的就是將實參中按照位置傳值,多出來的值都給args,且以元祖的方式呈現)
示例def foo(x,*args):
print(x)
print(args)
foo(1,2,3,4,5)#其中的2,3,4,5都給了args結果1
(2, 3, 4, 5)12
**kwargs:(表示的就是形參中按照關鍵字傳值把多餘的傳值以字典的方式呈現)示例
def foo(x,**kwargs):
print(x)
print(kwargs)
foo(1,y=1,a=2,b=3,c=4) #將y=1,a=2,b=3,c=4以字典的方式給了kwargs
結果:112
python中args和kwargs引數的使用
在python中,規定了函式中的形參前帶 的,稱為可變位置引數,通常用 args表示。args表示乙個元組,傳入的引數值會被放到這個元組裡面,型別可以是任意的。同理,函式中形參前帶 的,成為可變關鍵字引數,通常用 kwargs表示。表示乙個字典,傳入的引數以鍵值對的形式存放在了字典裡面。下面我們來看...
Python中 args 和 kwargs的用法
好久沒有學習python了,應為工作的需要,再次拾起python,喚起記憶。當函式的引數不確定時,可以使用 args 和 kwargs,args 沒有key值,kwargs有key值。還是直接來 吧,廢話少說 python def fun var args farg,args print arg f...
Python中 args 和 kwargs的用法
當函式的引數不確定時,可以使用 args 和 kwargs,args 沒有key值,kwargs有key值。還是直接來 吧,廢話少說 python view plaincopyprint?def fun var args farg,args print arg farg for value in a...