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

歡迎訪問 生活随笔!

生活随笔

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

python

Python之函数的收集参数和分配参数用法(‘*’ 和 ‘**’)

發(fā)布時間:2025/1/21 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之函数的收集参数和分配参数用法(‘*’ 和 ‘**’) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

學(xué)過 C 或 C++的童鞋看到‘*’的第一反應(yīng)就是“指針”,繼而在學(xué)習(xí) Python 的時候,也看到同樣的星號,本以為對這家伙很熟悉,不過,真正了解 Python 中的"*"后才知道,這個 C 中的指針根本就是兩碼事。那么這里要總結(jié)的就是 Python 的星號的用法和含義,那就是收集參數(shù)和分配參數(shù)。

收集參數(shù)

什么叫收集參數(shù)呢?當(dāng)我們在定義一個函數(shù)的時候,假如需要傳入的參數(shù)個數(shù)是不定的,按照一般的寫法可能需要定義很多個相同的函數(shù)然后指定不同的參數(shù)個數(shù),這顯然是很麻煩的,不能根本解決問題。

為解決這個問題,Python 就推出了收集參數(shù)的概念。所謂的收集參數(shù),就是說只指定一個參數(shù),然后允許調(diào)用函數(shù)時傳入任意數(shù)量的參數(shù)。函數(shù)定義如下:

>>> def fun(*param)

在函數(shù)定義中可以看到,函數(shù)中定義的參數(shù)名前面多了一個星號(*),而就是這個星號起了作用。
參數(shù)前面的星號將提供的所有值都放在一個元組中,也就是將這些值都收集起來。

>>> def print_params(*params): ... print(params) ... >>> print_params('hello') ('hello',) >>> print_params(1,2,3) (1, 2, 3) >>> print_params() () >>> def print_params(title,*params): ... print(title) ... print(params) ... >>> print_params('hello',1,2,3) hello (1, 2, 3)

因此星號意味著收集余下的位置參數(shù),如果沒有提供可收集的參數(shù),params 將會是一個空元組。

與賦值一樣,帶星號的參數(shù)也可以放在其他位置(而不是最后),但不同的是,在這種情況下需要做些額外的工作:使用關(guān)鍵字來指定后續(xù)參數(shù)
示例如下:

>>> def fun(x,*y,z): ... print(x,y,z) ... >>> fun(1,2,3,4,5,z=6) 1 (2, 3, 4, 5) 6 >>> fun(1,2,3,4,5,6) Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: fun() missing 1 required keyword-only argument: 'z'

上面示例可以看到,當(dāng)帶星號的參數(shù)放在中間位置時,后面的參數(shù)在傳入時必須指定參數(shù)名,否則將會報錯。星號不會收集關(guān)鍵字參數(shù)。

那么,上面提到星號不會收集關(guān)鍵字參數(shù),那么,如果要手機(jī)關(guān)鍵字參數(shù)怎么辦呢,這時候兩個“星星”(**)就派上用場了。
Python 總是那么體貼,什么情況都能考慮到。

接下來通過示例看看Python中的函數(shù)如何用**來收集關(guān)鍵字參數(shù)的。

>>> def fun(**params): ... print(params) ... >>> fun(x=1,y=2,z=3) {'x': 1, 'y': 2, 'z': 3}

通過上述示例可以看到,打印出來的值是一個字典而不是元組。

所以簡單的總結(jié)下:
Python 中函數(shù)參數(shù)帶*的話,將會收集非關(guān)鍵字的參數(shù)到一個元組中;
Python 中函數(shù)參數(shù)帶**的話,將會手機(jī)關(guān)鍵字參數(shù)到一個字典中;

下面結(jié)合使用這些技術(shù)來看個示例:

>>> def fun(x,y,z=3,*pospar,**keypar): ... print(x,y,z) ... print(pospar) ... print(keypar) ... >>> fun(1,2,3,4,5,6,a = 11,b = 12,c = 13) 1 2 3 (4, 5, 6) {'a': 11, 'b': 12, 'c': 13} >>> fun(1,2) 1 2 3 () {}

分配參數(shù)

前面說到收集參數(shù),那么,和收集參數(shù)對應(yīng)的相反操作就是分配參數(shù),而分配參數(shù)同樣可以用* 和**來實現(xiàn)。通過示例來看看分配參數(shù)如何運(yùn)作的。
加入有如下函數(shù):

>>> def add(x,y): ... return x+y

同時假設(shè)有一個元組,其中包含需要相加的兩個數(shù)

>>> param = (1,2)

這與前面的操作差不多是相反的,不是收集參數(shù),而是分配參數(shù),在調(diào)用函數(shù)是使用*實現(xiàn):

>>> add(*param) 3

上述是將一個元組分配給函數(shù)參數(shù)使用,這種做法也已用于參數(shù)列表的一部分,條件是這部分位于參數(shù)列表末尾。同樣的,可以使用**將字典中值分配給關(guān)鍵字參數(shù)。

>>> def fun(name,greeting): ... print(greeting,name) >>> param = {'name' :'jack','greeting':'well met'} >>> fun(**param) well met jack

OK,上述就是關(guān)于 Python 中收集參數(shù)和分配參數(shù)的用法,只有在定義函數(shù)(允許可變量的參數(shù))或調(diào)用函數(shù)時(拆分自己或序列)使用,星號才能發(fā)揮作用。

總結(jié)

以上是生活随笔為你收集整理的Python之函数的收集参数和分配参数用法(‘*’ 和 ‘**’)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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