您現在的位置是:首頁 > 籃球
有人看到*args和**kwargs就把桌子掀了
- 由 程式設計師James 發表于 籃球
- 2022-07-14
掀是什麼字
對於大部分學程式設計的同學來說,函式的引數往往都是“一個蘿蔔一個坑”,但是今天帶大家認識一對反三觀的哥倆 —— 不定長引數(
*args
,
**kwargs
)
*args
老規矩,先上程式碼:
def
sum(*args)
:
a =
0
for
n
in
args:
a+=n
return
a
寫了個求和的方法,引數是不定長引數
*args
,呼叫它下:
print(sum(
1
,
2
,
4
,
5
))
# 第一種呼叫方法,直接把數字寫入引數的括號中
tup = (
5
,
6
,
8
,
9
,
8
,
9
,
5
)
# 第二種呼叫方法,寫入一個元組
print(sum(*tup))
# 透過*tup(tup是變數名,可隨意取)傳入函式
輸出結果:
>> 12
>> 50
**kwargs
如果把
*args
理解成傳入一個元組的話,那麼可以把
**kwargs
理解成傳入一個字典。
def
register(**kwargs)
:
return
(kwargs)
呼叫一下
register
方法,也是有兩個方式的:
score = {
“大叔”
:
100
,
“Kevin”
:
90
,
“Jason”
:
95
,
}
print(
“第一種方式”
,
register(**score)
# 第一種
)
print(
“第二種方式”
,
register(**score, David=
90
, Sunhua=
90。5
)
# 第二種
)
輸出結果:
第一種方式 {
‘大叔’
: 100,
‘Kevin’
: 90,
‘Jason’
: 95}
第二種方式 {
‘大叔’
: 100,
‘Kevin’
: 90,
‘Jason’
: 95,
‘David’
: 90,
‘Sunhua’
: 90。5}
思考題
def
family(a,b,*args,**kwargs)
:
print(a)
print(b)
print(args)
print(kwargs)
我現在把
位置引數
,
不定長引數
都整合到一個函式中,如果我用下面的語句進行呼叫,那麼結果是什麼?
family(
1
,
2
,
3
,
4
,
5
,k=
8
,v=
9
)
知道結果的小夥伴可以把答案發到評論區。
關於掀桌子
以前我看到
*args
,
**kwargs
這倆兄弟一起出現,我也會有想掀桌子的衝動。相對一板一眼的關鍵字引數來說,這的確使函式程式碼可讀性、可維護性變差了不少。尤其對於習慣了
「強型別」
語言的程式設計師來說,這倆兄弟就是魔鬼!!!當然,那桌子也是“強哥”掀的~~~