網(wǎng)站首頁 編程語言 正文
前言:
我們使用兩個(gè)運(yùn)算符 *(用于元組)和 **(用于字典)。
背景?
考慮這樣一種情況,我們有一個(gè)接收四個(gè)參數(shù)的函數(shù)。我們想調(diào)用這個(gè)函數(shù),我們有一個(gè)大小為 4 的列表,其中包含函數(shù)的所有參數(shù)。如果我們只是將一個(gè)列表傳遞給函數(shù),則調(diào)用不起作用。
# 一個(gè)演示打包和解包需求的 Python 程序
# 一個(gè)接受 4 個(gè)參數(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ù)傳遞。
# 一個(gè)帶有 4 個(gè)參數(shù)并打印的示例函數(shù),
def fun(a, b, c, d):
print(a, b, c, d)
# 驅(qū)動程序代碼
my_list = [1, 2, 3, 4]
# 將列表解壓縮為四個(gè)參數(shù)
fun(*my_list)
輸出 :
(1, 2, 3, 4)
我們需要記住,參數(shù)的數(shù)量必須與我們?yōu)閰?shù)解包的列表的長度相同。
# 當(dāng) len(args) != 函數(shù)所需的實(shí)際參數(shù)沒有時(shí)出錯(cuò)
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
作為另一個(gè)示例,考慮需要單獨(dú)的開始和停止參數(shù)的內(nèi)置 range() 函數(shù)。如果它們不能單獨(dú)使用,請使用 *-operator 編寫函數(shù)調(diào)用以將參數(shù)從列表或元組中解包出來:
>>>
>>> range(3, 6) # 帶有單獨(dú)參數(shù)的正常調(diào)用
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args) # 使用從列表中解包的參數(shù)調(diào)用
[3, 4, 5]
Packing?
當(dāng)我們不知道需要將多少個(gè)參數(shù)傳遞給 python 函數(shù)時(shí),我們可以使用 Packing 將所有參數(shù)打包到一個(gè)元組中。
# 演示打包使用的 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ù)打包到一個(gè)變量中。一旦我們有了這個(gè)“打包”變量,我們就可以用它來做我們用普通元組做的事情。args[0] 和 args[1] 會分別給你第一個(gè)和第二個(gè)參數(shù)。由于我們的元組是不可變的,您可以將 args 元組轉(zhuǎn)換為列表,以便您還可以修改、刪除和重新排列 i 中的項(xiàng)目。
打包和拆包?
下面是一個(gè)顯示打包和拆包的示例。
# 一個(gè) Python 程序,用于演示打包和解包。
# 一個(gè)示例 python 函數(shù),它接受三個(gè)參數(shù)并打印它們
def fun1(a, b, c):
print(a, b, c)
# 另一個(gè)示例函數(shù)。
# 這是包裝的一個(gè)例子。 傳遞給 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!)
用于字典
# 演示使用 ** 解包字典項(xiàng)的示例程序
def fun(a, b, c):
print(a, b, c)
# 解包字典的調(diào)用
d = {'a':2, 'b':4, 'c':10}
fun(**d)
輸出:
2 4 10
這里 ** 解壓了與它一起使用的字典,并將字典中的項(xiàng)目作為關(guān)鍵字參數(shù)傳遞給函數(shù)。所以寫“fun(1, **d)”就相當(dāng)于寫“fun(1, b=4, c=10)”。
# 一個(gè) Python 程序,用于演示使用 ** 打包字典項(xiàng)
def fun(**kwargs):
# kwargs 是一個(gè)字典
print(type(kwargs))
# 打印字典項(xiàng)目
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)用和要點(diǎn) :
- 在套接字編程中用于向服務(wù)器發(fā)送大量請求。
- 在 Django 框架中用于將變量參數(shù)發(fā)送到視圖函數(shù)。
- 有些包裝函數(shù)需要我們傳入可變參數(shù)。
- 參數(shù)的修改變得容易,但同時(shí)驗(yàn)證不正確,因此必須小心使用它們。
原文鏈接:https://juejin.cn/post/7132387761553670180
相關(guān)推薦
- 2022-04-20 用Python實(shí)現(xiàn)插值算法_python
- 2022-08-16 C++超詳細(xì)梳理基礎(chǔ)知識_C 語言
- 2022-10-10 基于?Spring?Aop?環(huán)繞通知實(shí)現(xiàn)?Redis?緩存雙刪功能(示例代碼)_Redis
- 2022-10-03 利用正則表達(dá)式校驗(yàn)金額最多保留兩位小數(shù)實(shí)例代碼_正則表達(dá)式
- 2022-11-14 react使用useImperativeHandle示例詳解_React
- 2022-05-11 C#對集合進(jìn)行排序_C#教程
- 2023-04-03 GoLang?BoltDB數(shù)據(jù)庫詳解_Golang
- 2022-12-05 Python最長回文子串問題_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支