python *args和**kwargs以及序列解包

DAY 8. *args和**kwargs

*args:多值元組,**kwargs多值字典,他們是python函數傳參時兩個特殊的參數,args和kwargs并不是強制的,但習慣使用這兩個,如果在函數參數列表中聲明了*args,則允許傳遞任意多的參數,多余的參數會被以元組的形式賦給args變量,而**kwargs允許你使用沒有定義的變量名,會把顯式傳遞的參數打包成字典

def output(*args, **kwargs):print(args)print(kwargs)output('zhangsan', 'lisi', 5, 6,a=1,b=2,c=3)# ('zhangsan', 'lisi', 5, 6)
# {'a': 1, 'b': 2, 'c': 3}

如果函數還有別的參數,傳遞參數時會從左到右依次對照賦值,所以請務必把*args**kwargs放在函數參數列表的最后,否則會拋出TypeError異常,并且*args必須放在**kwargs前面,正確的參數順序應該是

def fun(arg, *args, **kwargs):pass

在調用函數時也可以使用***

def put(a, b, c):print(f'a={a},b={b},c={c}')put(*mylist)  # a=aardvark,b=baboon,c=cats = {'a': 1, 'b': 2, 'c': 3}
put(**s)  # a=1,b=2,c=3

之所以能實現這樣的功能,原理是序列解包,下面簡單介紹序列解包

>>> s = "ABCDE"
>>> a,b,c,d,e = s
>>> a,c
('A', 'C')>>> t = (1,2,3,4,5)
>>> a1,b1,c1,d1,e1 = t
>>> a1,c1
(1, 3)

上面就是用到了序列解包,左右兩端的元素個數必須相等,否則會拋出ValueError異常

>>> a2,b2 = s
Traceback (most recent call last):File "<pyshell#6>", line 1, in <module>a2,b2 = s
ValueError: too many values to unpack (expected 2)

但總不能所有序列都一一對應把,如果序列有很多位或不確定有多少位時使用序列解包就顯得很不方便了,這時候就可以使用*和了

>>> a3,*a4 = s
>>> a3,a4
('A', ['B', 'C', 'D', 'E'])
>>> while s:f,*s = sprint(f,s)A ['B', 'C', 'D', 'E']
B ['C', 'D', 'E']
C ['D', 'E']
D ['E']
E []

參考文章:

詳解Python序列解包(4)

stack overflow

從一個例子看Python3.x中序列解包

GitHub python面試題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457589.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457589.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解讀直播連麥與點播加密

近年來&#xff0c;直播熱潮持續升溫。有需求就會有變革&#xff0c;直播的相關技術也在不斷更新&#xff0c;為直播行業帶來更好地服務。如&#xff1a;直播連麥與點播加密技術等。 直播連麥&#xff0c;即主播與連麥者通過互動直播中心進行實時互動&#xff0c;信息在云端混流…

血紅蛋白判斷access程序答案_普渡大學開發智能手機應用程序 幫助評估貧血癥情況...

醫生診斷貧血疾病的方法之一&#xff0c;就是通過觀察患者的眼皮&#xff0c;判斷眼皮是否發紅&#xff0c;從而判斷紅細胞的數量。但對醫生來說&#xff0c;面臨的挑戰是&#xff0c;這種簡單的測試不夠精確&#xff0c;無法不從患者身上抽取血樣就能給出診斷。美國普渡大學的…

學習筆記:AC自動機

話說AC自動機有什么用......我想要自動AC機 AC自動機簡介&#xff1a; 首先簡要介紹一下AC自動機&#xff1a;Aho-Corasick automation&#xff0c;該算法在1975年產生于貝爾實驗室&#xff0c;是著名的多模匹配算法之一。一個常見的例子就是給出n個單詞&#xff0c;再給出一段…

python閉包和裝飾器

DAY 9. 閉包和裝飾器 9.1 閉包 閉包就是內部函數對外部函數作用域內變量的引用 可以看出 閉包是針對函數的&#xff0c;還有兩個函數&#xff0c;內部函數和外部函數閉包是為了讓內部函數引用外部函數作用域內的變量的 我們先寫兩個函數 def fun1():print("我是fun1&q…

學歷是銅牌,能力是銀牌,人脈是金牌,思維是王牌

有人工作&#xff0c;有人上學&#xff0c;大家千萬不要錯過這篇文章&#xff0c;能看到這篇文章也是一種幸運&#xff0c;真的受益匪淺&#xff0c;對我有很大啟迪&#xff0c;這篇文章將會改變你我的一生&#xff0c;真的太好了&#xff0c;希望與有緣人分享&#xff0c;也希…

石頭剪刀布python編程_《python核心編程第二版》練習題——游戲:石頭剪刀布

習題里比較有意思的一個題目&#xff0c;實現石頭剪刀布這個游戲&#xff0c;起初設計的時候走彎路了(主要時被習題里那個“盡量少用if判斷”給整暈了)&#xff0c;想的太復雜&#xff0c;后來發現其實非常簡單&#xff0c;完全可以不寫if語句。還是枚舉法&#xff1a;#! /usr/…

SpringMvc面試題

f-sm-1. 講下SpringMvc和Struts1,Struts2的比較的優勢 性能上Struts1>SpringMvc>Struts2 開發速度上SpringMvc和Struts2差不多,比Struts1要高f-sm-2. 講下SpringMvc的核心入口類是什么,Struts1,Struts2的分別是什么 SpringMvc的是DispatchServlet,Struts1的是ActionServl…

python 鴨子類型

DAY 10. 鴨子類型 這個概念來源于美國印第安納州的詩人詹姆斯惠特科姆萊利&#xff08;James Whitcomb Riley,1849-1916&#xff09;的詩句&#xff1a;”When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.”…

thinkphp一句話疑難解決筆記

URL_PATHINFO_DEPR, depr表示 網頁路徑"分隔符",用"-", 有利于seo,注意是從 sername/index.php(開始的)/home-user-login-var-value開始的,pathinfo也支持普通的參數傳值(僅僅支持參數...). 在thinkphp中,有兩個地方使用depr,另一個就是tpl的文件目錄組織分…

python選取特定行_pandas.DataFrame選取/排除特定行的方法

pandas.DataFrame選取特定行使用Python進行數據分析時&#xff0c;經常要使用到的一個數據結構就是pandas的DataFrame&#xff0c;如果我們想要像Excel的篩選那樣&#xff0c;只要其中的一行或某幾行&#xff0c;可以使用isin()方法&#xff0c;將需要的行的值以列表方式傳入&a…

學校選址_洛谷U3451_帶權中位數

題目描述 在一條大路一旁有許多棟樓&#xff0c;每棟樓里有許多小學生&#xff08;哈哈哈一波小學生來襲&#xff01;&#xff09;。但是這條路上沒有小學&#xff01;&#xff01;&#xff01;&#xff01;所以唯恐世界不亂的牛A打算在路上&#xff08;汽車什么的都不敢來這個…

python 重載的實現(single-dispatch generic function)

DAY 11. python 重載 函數重載是指允許定義參數數量或類型不同的同名函數&#xff0c;程序在運行時會根據所傳遞的參數類型選擇應該調用的函數 &#xff0c;但在默認情況下&#xff0c;python是不支持函數重載的&#xff0c;定義同名函數會發生覆蓋 def foo(a:int):print(fin…

SQL中的多表查詢,以及JOIN的順序重要么?

說法是&#xff0c;一般來說&#xff0c;JOIN的順序不重要&#xff0c;除非你要自己定制driving table。 示例&#xff1a; SELECT a.account_id, c.fed_id, e.fname, e.lname-> FROM account AS a INNER JOIN customer AS c-> ON a.cust_id c.cust_id-> INNER JOIN …

python可變對象 不可變對象_【Python】可變對象和不可變對象

在 Python 中一切都可以看作為對象。每個對象都有各自的 id, type 和 value。id: 當一個對象被創建后&#xff0c;它的 id 就不會在改變&#xff0c;這里的 id 其實就是對象在內存中的地址&#xff0c;可以使用 id() 去查看對象在內存中地址。type: 和 id 一樣當對象唄創建之后…

MySQL 調優基礎(三) Linux文件系統

Linux的文件系統有點像MySQL的存儲引擎&#xff0c;它支持各種各樣的文件系統。它最上層是通過 virtual files system虛擬文件系統作為一個抽象接口層來對外提供調用的。然后下層的各種文件系統實現這些調用接口就行了。 1. Linux 中的 日志文件系統和非日志文件系統 文件內容的…

python 經典類和新式類

DAY 12. python新式類和舊式類 繼承自object基類的類叫做新式類&#xff0c;否則叫做舊式類&#xff0c;python3中的類默認是新式類&#xff0c;之前版本默認是舊式類 rootkail:~# python python 2.7.15 (default,Jul 28 2018,11:29:29) [GCC 8.1.0] on linux2 Type "he…

Why does pthread_cond_signal not work?【轉】

轉自&#xff1a;http://stackoverflow.com/questions/16819169/why-does-pthread-cond-signal-not-work# 0 down vote favorite I am currently learing all around POSIX threads (pthread). I now have created a simple program which increased a shared value by 7 until…

Android開發技術周報 Issue#72

新聞 Android N 最初預覽版&#xff1a;開發者 API 和工具教程 Gradle依賴的統一管理 理解Java垃圾回收機制 淺談 Android 編程思想和架構 由Android 65K方法數限制引發的思考 Android音頻開發&#xff08;1&#xff09;&#xff1a;基礎知識 Android音頻開發&#xff08;…

python 單例模式的四種實現方法

DAY 13. 單例設計 13.1 什么是單例設計 一個類每次實例化返回的都是同一個對象&#xff0c;這種設計模式叫做單例設計&#xff0c;這個類叫做單例類 13.2 實現單例設計的方法 13.2.1 重寫__new__() class Foo:def __new__(cls,*args, **kwargs):# 如果是第一次實例化&…

Redis3.2.5部署(單節點)

1.安裝jdk1.8 [rootsht-logstash-01 ~]# cd /usr/java/ [rootsht-logstash-01 java]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111…