剛開始學習python,覺得args、**kwargs參數很難理解。
大概知道args是解包元組,**kwargs是解包字典,但是僅僅知道這點,還是不會使用這兩個參數。
# *args參數的使用
# 計算除第一個參數外所有參數之和
def calculate_sum(*args): # args是一個元組
return sum(args) # 使用內建函數’sum’,它使用元組或數列作為參數,返回元組所有元素的和。
def ignore_first_calculate_sum(a,*iargs): # 第一個參數被常規參數’a’接收,其他參數被’iargs’作為元組接收
required_sum = calculate_sum(*iargs)
print("sum is ", required_sum)
def test_sum():
ignore_first_calculate_sum(1,*(2,3,4,5,6))
'''
用到函數’calculate_sum’,’calculate_sum’需要多個位置參數作為元組傳給’args’,
所以在函數’ignore_first_calculate_sum’需要拆元組’iargs’,然后將元素作為位置參數傳給’calculate_sum’。
注意,用’*’拆元組
'''
def fun(a,**kwargs):
print('a is :',a)
print("We expect kwargs 'b' and 'c' in this function")
print("b is ", kwargs['b'])
print("c is ", kwargs['c'])
def test_kwargs():
fun(1,b=3,c=44)
'''
fun(1, {'b':2, 'c':34}),這樣調用會報錯:ypeError: fun() takes exactly 1 argument (2 given)
盡管’kwargs’接收鍵值參數作為一個字典,但你不能傳一個字典作為位置參數給’kwargs’
可以這樣調用:fun(1, **{'b':2, 'c':34})
在一個字典前使用”**”可以unpack字典,傳字典中的數據項作為鍵值參數。
'''
- todo