日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python参数传递_python中的*和**参数传递机制

發(fā)布時(shí)間:2025/3/15 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python参数传递_python中的*和**参数传递机制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python的參數(shù)傳遞機(jī)制具有值傳遞(int、float等值數(shù)據(jù)類型)和引用傳遞(以字典、列表等非值對(duì)象數(shù)據(jù)類型為代表)兩種基本機(jī)制以及方便的關(guān)鍵字傳遞特性(直接使用函數(shù)的形參名指定實(shí)參的傳遞目標(biāo),如函數(shù)定義為def f(a,b,c),那么在調(diào)用時(shí)可以采用f(b=1,c=2,a=3)的指定形參目標(biāo)的傳遞方式,而不必拘泥于c語言之類的形參和實(shí)參按位置對(duì)應(yīng))

除此之外,python中還允許包裹方式的參數(shù)傳遞,這未不確定參數(shù)個(gè)數(shù)和參數(shù)類型的函數(shù)調(diào)用提供了基礎(chǔ):

def f(*a,**b)

包裹參數(shù)傳遞的實(shí)現(xiàn)是在定義函數(shù)時(shí)在形參前面加上*或**,*所對(duì)應(yīng)的形參(如上面的a)會(huì)被解釋為一個(gè)元組(tuple,而**所對(duì)應(yīng)的形參(如上面的b)會(huì)被解釋為一個(gè)字典。具體調(diào)用時(shí)參數(shù)的傳遞見下面的代碼:

def f(*a,**b):print(a)print(b)

a=3b=4f(a,b,m=1,n=2)

上面代碼的運(yùn)行結(jié)果是:

(3, 4)

{'n': 2, 'm': 1}

可見,對(duì)于不使用關(guān)鍵字傳遞的變量,會(huì)被作為元組的一部分傳遞給*a,而使用關(guān)鍵字傳遞的變量作為字典的一部分傳遞給了**b。

同時(shí)有個(gè)tricky的地方,python中規(guī)定非關(guān)鍵字傳遞的變量必須寫在關(guān)鍵字傳遞變量的前面,所以混合使用*和**時(shí)肯定時(shí)*形參在**形參的前面。

此外,在進(jìn)行函數(shù)調(diào)用時(shí),與之配套的就有個(gè)被稱為解包裹的方式:

def f(*a,**b):print(a)print(b)

c=3d=4h=(c,d)

k={"m":1,"n":2}

f(*h,**k)

上面代碼的輸出與前面一致。

把元組或字典作為參數(shù)傳入時(shí),如果要適配包裹形式的形參定義(如上面將h傳給*a,k傳給**b),按照元組用*,字典用**的方式“解包裹”傳遞即可。

實(shí)際上,在調(diào)用f時(shí)使用*,是為了提醒Python:我想要把實(shí)參h拆成分散的2個(gè)元素c和d,進(jìn)行分別傳遞(所有上面代碼中的f定義成def f(arg1,arg2,**b)也是可以的,這樣arg1會(huì)獲得3這個(gè)值而arg2會(huì)獲得4這個(gè)值)。**同理類似。另外,解包裹時(shí)*對(duì)于列表([]定義的為列表,()定義的為元組)也適用。

deff(c,d,n,m):print(c)print(d)print(m)print(n)

a=3b=4h=[a,b]

k={"m":1,"n":2}

f(*h,**k)

上面的輸出是

3

4

1

2

與前面所述相符,因此要注意,對(duì)于**k這種字典的解包裹,要求函數(shù)的形參名和字典中的key值對(duì)應(yīng),

上面的例子中如果把def f(c,d,n,m)中的n改為其它的字母就會(huì)報(bào)錯(cuò)

有了包裹傳遞后,調(diào)用函數(shù)時(shí)就可以傳遞任意數(shù)量的參數(shù),而由于元組和字典都是有__len__方法可以獲得其元素個(gè)數(shù)的,所以在編寫函數(shù)時(shí)可根據(jù)這一信息對(duì)不同的參數(shù)數(shù)目進(jìn)行不同處理。

總結(jié)

以上是生活随笔為你收集整理的python参数传递_python中的*和**参数传递机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。