Python?變量教程之打包和解包參數(shù)
前言:
我們使用兩個運算符 *(用于元組)和 **(用于字典)。
背景
考慮這樣一種情況,我們有一個接收四個參數(shù)的函數(shù)。我們想調(diào)用這個函數(shù),我們有一個大小為 4 的列表,其中包含函數(shù)的所有參數(shù)。如果我們只是將一個列表傳遞給函數(shù),則調(diào)用不起作用。
# 一個演示打包和解包需求的 Python 程序 # 一個接受 4 個參數(shù)并打印它們的示例函數(shù)。 def fun(a, b, c, d): print(a, b, c, d) # 驅(qū)動程序代碼 my_list = [1, 2, 3, 4] # 這不起作用 fun(my_list)
輸出 :
TypeError: fun() takes exactly 4 arguments (1 given)
解
包我們可以使用 ***** 來解包列表,以便它的所有元素都可以作為不同的參數(shù)傳遞。
# 一個帶有 4 個參數(shù)并打印的示例函數(shù), def fun(a, b, c, d): print(a, b, c, d) # 驅(qū)動程序代碼 my_list = [1, 2, 3, 4] # 將列表解壓縮為四個參數(shù) fun(*my_list)
輸出 :
(1, 2, 3, 4)
我們需要記住,參數(shù)的數(shù)量必須與我們?yōu)閰?shù)解包的列表的長度相同。
# 當(dāng) len(args) != 函數(shù)所需的實際參數(shù)沒有時出錯 args = [0, 1, 4, 9] def func(a, b, c): return a + b + c # 使用解包參數(shù)調(diào)用函數(shù) func(*args)
輸出:
Traceback (most recent call last):
File "/home/592a8d2a568a0c12061950aa99d6dec3.py", line 10, in <module>
func(*args)
TypeError: func() takes 3 positional arguments but 4 were given
作為另一個示例,考慮需要單獨的開始和停止參數(shù)的內(nèi)置 range() 函數(shù)。如果它們不能單獨使用,請使用 *-operator 編寫函數(shù)調(diào)用以將參數(shù)從列表或元組中解包出來:
>>> >>> range(3, 6) # 帶有單獨參數(shù)的正常調(diào)用 [3, 4, 5] >>> args = [3, 6] >>> range(*args) # 使用從列表中解包的參數(shù)調(diào)用 [3, 4, 5]
Packing
當(dāng)我們不知道需要將多少個參數(shù)傳遞給 python 函數(shù)時,我們可以使用 Packing 將所有參數(shù)打包到一個元組中。
# 演示打包使用的 Python 程序 # 此函數(shù)使用打包來匯總未知數(shù)量的參數(shù) def mySum(*args): return sum(args) # 驅(qū)動程序代碼 print(mySum(1, 2, 3, 4, 5)) print(mySum(10, 20))
輸出:
15
30
上述函數(shù) mySum() 執(zhí)行“打包”以將此方法調(diào)用接收到的所有參數(shù)打包到一個變量中。一旦我們有了這個“打包”變量,我們就可以用它來做我們用普通元組做的事情。args[0] 和 args[1] 會分別給你第一個和第二個參數(shù)。由于我們的元組是不可變的,您可以將 args 元組轉(zhuǎn)換為列表,以便您還可以修改、刪除和重新排列 i 中的項目。
打包和拆包
下面是一個顯示打包和拆包的示例。
# 一個 Python 程序,用于演示打包和解包。 # 一個示例 python 函數(shù),它接受三個參數(shù)并打印它們 def fun1(a, b, c): print(a, b, c) # 另一個示例函數(shù)。 # 這是包裝的一個例子。 傳遞給 fun2 的所有參數(shù)都打包到元組 *args 中。 def fun2(*args): # 將 args 元組轉(zhuǎn)換為列表,以便我們修改它 args = list(args) # 修改參數(shù) args[0] = 'Haiyong' args[1] = 'awesome' # 拆包參數(shù)并調(diào)用 fun1() fun1(*args) # 驅(qū)動程序代碼 fun2('Hello', 'beautiful', 'world!')
輸出:
(Haiyong, awesome, world!)
用于字典
# 演示使用 ** 解包字典項的示例程序 def fun(a, b, c): print(a, b, c) # 解包字典的調(diào)用 d = {'a':2, 'b':4, 'c':10} fun(**d)
輸出:
2 4 10
這里 ** 解壓了與它一起使用的字典,并將字典中的項目作為關(guān)鍵字參數(shù)傳遞給函數(shù)。所以寫“fun(1, **d)”就相當(dāng)于寫“fun(1, b=4, c=10)”。
# 一個 Python 程序,用于演示使用 ** 打包字典項 def fun(**kwargs): # kwargs 是一個字典 print(type(kwargs)) # 打印字典項目 for key in kwargs: print("%s = %s" % (key, kwargs[key])) # 驅(qū)動程序代碼 fun(name="geeks", ID="101", language="Python")
輸出:
<class 'dict'>
name = geeks
ID = 101
language = Python
應(yīng)用和要點 :
- 在套接字編程中用于向服務(wù)器發(fā)送大量請求。
- 在 Django 框架中用于將變量參數(shù)發(fā)送到視圖函數(shù)。
- 有些包裝函數(shù)需要我們傳入可變參數(shù)。
- 參數(shù)的修改變得容易,但同時驗證不正確,因此必須小心使用它們。
到此這篇關(guān)于Python 變量教程之打包和解包參數(shù)的文章就介紹到這了,更多相關(guān)Python 打包解包參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
安裝并免費使用Pycharm專業(yè)版(學(xué)生/教師)
這篇文章主要介紹了安裝并免費使用Pycharm專業(yè)版(學(xué)生/教師),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python如何調(diào)用現(xiàn)有的matlab函數(shù)
這篇文章主要介紹了python如何調(diào)用現(xiàn)有的matlab函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12python ansible自動化運維工具執(zhí)行流程
ansible是基于 paramiko 開發(fā)的,并且基于模塊化工作,本身沒有批量部署的能力,接下來通過本文給大家分享python ansible自動化運維工具的特點及執(zhí)行流程,感興趣的朋友跟隨小編一起看看吧2021-06-06