五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

關(guān)于Python中*args和**kwargs的深入理解

發(fā)布日期:2022-02-19 10:15 | 文章來(lái)源:源碼之家

1. 理解 * 和 **

Python的賦值語(yǔ)句可以解包將可迭代元素剝離出來(lái)

In [6]: a, b, c = [1, 2, 3]
In [7]: a
Out[7]: 1
In [8]: b
Out[8]: 2
In [9]: c
Out[9]: 3

賦值語(yǔ)句可以理解為 a, b, c = [a, b, c] = [1, 2, 3], 將變量a, b, c與目標(biāo)列表中的數(shù)據(jù)進(jìn)行對(duì)應(yīng).

Python中 * 和 ** 可以理解成一個(gè)特殊的解包語(yǔ)法. 將可迭代的對(duì)象列表字典等, 獲取其中的內(nèi)容.

將 * 應(yīng)用到賦值語(yǔ)句中, 可以解包多個(gè)數(shù)據(jù)對(duì)應(yīng)到一個(gè)列表變量.

In [10]: a, *other = [1, 2, 3, 4]
In [11]: a
Out[11]: 1
In [12]: other
Out[12]: [2, 3, 4]
 
In [13]: a, *middle, x = [1, 2, 3, 4]
In [14]: middle
Out[14]: [2, 3]

結(jié)合 print 函數(shù)理解解包, 第二個(gè)print(*['a', 'b', 'c', 'd']) 使用*號(hào)將列表解包后, 相當(dāng)于print('a', 'b', 'c', 'd')

In [15]: print(['a', 'b', 'c', 'd'])
['a', 'b', 'c', 'd']
 
In [16]: print(*['a', 'b', 'c', 'd'])
a b c d

2.Python函數(shù)的參數(shù)

Python函數(shù)的傳參, 支持兩種方式, 一種是基于位置傳遞(Positional Arguments), 一種是基于變量名稱傳遞(Keyword Arguments).

比如定義一個(gè)函數(shù)func 接受4個(gè)參數(shù)

In [1]: def func(a, b, c, d):
...: print(a, b, c, d)

可以基于位置傳參, (1, 2, 3, 4)根據(jù)位置順序分別賦值給參數(shù)a, b, c, d.

In [2]: func(1, 2, 3, 4)
1 2 3 4

也可以基于變量名傳遞參數(shù), 指定(d=1, c=2, b=3, a=4)分別賦值給對(duì)應(yīng)變量, keyword argument可以亂序

In [3]: func(d=1, c=2, b=3, a=4)
4 3 2 1

或者混合兩種參數(shù)格式, 組合位置參數(shù)和關(guān)鍵字參數(shù). 注意這時(shí)不能重復(fù)賦值, 即已經(jīng)傳遞了位置參數(shù), 不能再通過(guò)關(guān)鍵字傳參.

In [4]: func(1, 2, d=3, c=4)
1 2 4 3
 
In [5]: func(1, 2, a=3, c=4)
TypeError: func() got multiple values for argument 'a'

3. 支持任意參數(shù)的函數(shù) *args, **kwargs

然后就是我們查看源碼時(shí)經(jīng)??吹降恼Z(yǔ)法, *args, **kwargs. 可以看到arg和kwarg即是一個(gè)變量, 目的是保存函數(shù)中的位置參數(shù)和關(guān)鍵字參數(shù),成一個(gè)元組和字段對(duì)象, 保存args和kwargs就是變量名.

In [1]: def func(var, *args, key=None, **kwargs):
...:  print('args: ', args)
...:  print('kwargs: ', kwargs)

定義一個(gè)除了位置參數(shù) var , 和關(guān)鍵字參數(shù) key 之外還接受任意參數(shù)的函數(shù).

調(diào)用函數(shù)時(shí),傳的其他參數(shù)就會(huì)賦值給 args, 和 kwargs.

In [2]: func('one', 'two', 'three', key='key', four=4, five=5,)
args:  ('two', 'three')
kwargs:  {'four': 4, 'five': 5}
 
In [3]: func('one', 'two', key='key', three='three', four=4, five=5,)
args:  ('two',)
kwargs:  {'three': 'three', 'four': 4, 'five': 5}

可以看到 'one' 賦值給了變量 var, 'two' 和 'three' 傳給了元組args, 'key'賦值給了變量 four=4, five=5, 傳遞給了kwargs , {'four': 4, 'five': 5}.

改變three的傳參方式使用three='three'之后, three也去了kwargs.

4. 固定位置參數(shù)和關(guān)鍵字參數(shù) / *

Python3.8 中增加了固定參數(shù)的關(guān)鍵字 / 和 * , 使用/之前的參數(shù),只能通過(guò)位置方式傳參, 使用*之后的參數(shù), 只能通過(guò)關(guān)鍵字方式傳參.

重新寫一個(gè)最開始的函數(shù)

In [1]: def func(a, /, b, *, c, d):
...: print(a, b, c, d)

其中參數(shù)a只能通過(guò)位置傳遞, c和d只能通過(guò)關(guān)鍵字傳遞, 參數(shù)b不做限制

In [2]: func(1, 2, c=3, d=4)
1 2 3 4
In [3]: func(1, b=2, c=3, d=4)
1 2 3 4
 
In [4]: func(a=1, b=2, c=3, d=4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() got some positional-only arguments passed as keyword arguments: 'a'
 
In [5]: func(1, 2, 3, d=4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given

可以看到, 限制了參數(shù)類型之后, 傳參方式錯(cuò)誤函數(shù)會(huì)報(bào)TypeError, 應(yīng)用到一些需要限制顯式傳遞參數(shù)的場(chǎng)景, 可以提高代碼的可讀性.

5. **的另一個(gè)用法, 字典合并

3.8之后還增加了一個(gè)**的新用法, 支持在字典初始化時(shí)使用**語(yǔ)法. 合并現(xiàn)有字典的數(shù)據(jù)時(shí), 可不使用dict.update()函數(shù). 代碼示例如下

In [1]: a = {'k': 1, 'm': 2}
In [2]: y = {'y': '3', 'z': 'ii'}
 
In [3]: {**a}
Out[3]: {'k': 1, 'm': 2}
In [4]: {**a, **y}
Out[4]: {'k': 1, 'm': 2, 'y': '3', 'z': 'ii'}
In [5]: {**a, **y, 'uu': 88}
Out[5]: {'k': 1, 'm': 2, 'y': '3', 'z': 'ii', 'uu': 88}

總結(jié):

本文總結(jié)了python中*和**的使用方法, 解包時(shí)可以獲取可迭代對(duì)象中的內(nèi)容.

  1. * 和**在定義函數(shù)時(shí)使用, 使得函數(shù)可以支持任意長(zhǎng)度的參數(shù)
  2. 解包時(shí)可將任意長(zhǎng)度數(shù)據(jù)賦值給一個(gè)對(duì)象
  3. 關(guān)鍵字 / 和 * 規(guī)定參數(shù)的傳遞方式.
  4. 生成新的字典時(shí)使用**解包其他字典中的值

到此這篇關(guān)于Python中*args和**kwargs深入理解的文章就介紹到這了,更多相關(guān)Python中*args和**kwargs內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國(guó)服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部