好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 關于Python中*args和**kwargs的深入理解

關于Python中*args和**kwargs的深入理解

熱門標簽:旅游廁所地圖標注怎么弄 無錫智能外呼系統好用嗎 南昌地圖標注 地圖標注與注銷 西青語音電銷機器人哪家好 電梯新時達系統外呼顯示e 宿州電話機器人哪家好 百應電話機器人總部 成都呼叫中心外呼系統哪家強

1. 理解  *  和  **

Python的賦值語句可以解包將可迭代元素剝離出來

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

賦值語句可以理解為 a, b, c = [a, b, c] = [1, 2, 3], 將變量a, b, c與目標列表中的數據進行對應.

Python中 * 和 ** 可以理解成一個特殊的解包語法. 將可迭代的對象列表字典等, 獲取其中的內容.

將 * 應用到賦值語句中, 可以解包多個數據對應到一個列表變量.

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]

結合 print 函數理解解包, 第二個print(*['a', 'b', 'c', 'd']) 使用*號將列表解包后, 相當于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函數的參數

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

比如定義一個函數func 接受4個參數

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

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

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

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

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

或者混合兩種參數格式, 組合位置參數和關鍵字參數. 注意這時不能重復賦值, 即已經傳遞了位置參數, 不能再通過關鍵字傳參.

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. 支持任意參數的函數 *args, **kwargs

然后就是我們查看源碼時經常看到的語法, *args, **kwargs. 可以看到arg和kwarg即是一個變量, 目的是保存函數中的位置參數和關鍵字參數,成一個元組和字段對象, 保存args和kwargs就是變量名.

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

定義一個除了位置參數 var , 和關鍵字參數 key 之外還接受任意參數的函數.

調用函數時,傳的其他參數就會賦值給 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. 固定位置參數和關鍵字參數  /   * 

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

重新寫一個最開始的函數

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

其中參數a只能通過位置傳遞, c和d只能通過關鍵字傳遞, 參數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

可以看到, 限制了參數類型之后, 傳參方式錯誤函數會報TypeError, 應用到一些需要限制顯式傳遞參數的場景, 可以提高代碼的可讀性.

5. **的另一個用法, 字典合并

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

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}

總結:

本文總結了python中*和**的使用方法,  解包時可以獲取可迭代對象中的內容.

  1. * 和**在定義函數時使用, 使得函數可以支持任意長度的參數
  2. 解包時可將任意長度數據賦值給一個對象
  3. 關鍵字 / 和 * 規定參數的傳遞方式.
  4. 生成新的字典時使用**解包其他字典中的值

到此這篇關于Python中*args和**kwargs深入理解的文章就介紹到這了,更多相關Python中*args和**kwargs內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python可變參數*args和**kwargs用法實例小結
  • Python中*args和**kwargs的區別詳解
  • 對python中的*args與**kwgs的含義與作用詳解
  • Python編程中*args與**kwargs區別作用詳解

標簽:西安 渭南 贛州 七臺河 濰坊 許昌 雅安 辛集

巨人網絡通訊聲明:本文標題《關于Python中*args和**kwargs的深入理解》,本文關鍵詞  關于,Python,中,args,和,kwargs,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《關于Python中*args和**kwargs的深入理解》相關的同類信息!
  • 本頁收集關于關于Python中*args和**kwargs的深入理解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 床戏抓胸吻胸揉胸网站| 久久99精品国产| 小sao货水好多真紧h国产| 色香视频首页| 久久这里只有精品免费视频| 草莓在深夜释放自己免费| 免费?无码?国产成年游戏| 边添小泬边狠狠躁视频网站动漫| 久99久爱精品免费观看视频| 婷婷777| 68283大尺度泰国人体| 成人免费看一级A片春色韩国| 最新亚洲手机在线人成网站| 欧美黄色网址| 好大好硬好爽好舒服视频在线观看| 狠狠婷婷综合缴情亚洲| 美女的裸照| 最新国产精品好看的国产精品| 丰满岳乱妇在线观看中字无码| 夜蒲团在线| 女人怎么才能水越来越多| 业余性别自由XXⅩXX中国| 国产91电影| 免费av中文字幕| 含羞草实验入口免费无需下| 配种强行很爽的视频| 18???成人免费网站下载| 男女激烈XXOO无遮挡| 精品日产一匹二匹三匹四匹五匹| 被色情系统肉到哭H| 男人啪啪女人| 日本无遮羞肉体动漫在线播放| 久久夜色av| 两个裸男脱了内裤互摸的视频| 全程穿着高跟鞋做爰视频| 10周岁女全身裸无遮挡| 国产一区二三区免费A片惊变| 亚洲最大的黄色网| 亚洲乱码国产一区三区| 大尺度女同无删减电影| 先の欲求不満な人妻在线|