測(cè)試輸入如下,一個(gè)tuple苦锨,一個(gè)dict
lls = (78, 'stupid')
dds = dict(k1=1, k2=2, k3=3, name='stupid', num=76)
元組傳入固定參數(shù)函數(shù)
通過*拆包
def unpack(num, word):
print('hope num...{}'.format(num))
print('hope stupid..'+word)
unpack(*lls)
輸出如下:
hope num...78
hope stupid..stupid
不定長(zhǎng)參數(shù)*args
傳入元組時(shí)仍當(dāng)作單個(gè)參數(shù)處理,同上拆包
def unpack2(*content):
print(repr(content))
print(', '.join('hope num...{}'.format(num) for num in content))
unpack2(lls)#((78, 'stupid'),)
值得注意的是
#unpack2(*lls, 96) #SyntaxError: only named arguments may follow *expression
unpack2(96, *lls) # 拆包符號(hào)僅能作最后一個(gè)參數(shù)
unpack2(*(lls+(1,))) #Solution
只允許星號(hào)表達(dá)式作為參數(shù)列表中的最后一項(xiàng)璧帝。這將簡(jiǎn)化拆包代碼叔锐,并使得允許將星號(hào)表達(dá)式分配給一個(gè)迭代器。這種行為被拒絕了紧帕,因?yàn)檫@太令人吃驚了盔然。(違反了'最少驚訝原則')
但這種情況只會(huì)出現(xiàn)在Python2中桅打。
Python3有“僅限關(guān)鍵字參數(shù)”
>>> def f(a, *, b):
··· return a, b
···
>>> f(1, b=2)
(1,2)
不定長(zhǎng)參數(shù)/dict的拆包表達(dá)式:**args
**dict將每個(gè)鍵值對(duì)元素作為單個(gè)元素作為參數(shù)傳入。
**dict放在形式參數(shù)末尾愈案,鍵值對(duì)與其他形式參數(shù)名匹配挺尾,剩余的存入形參dict。
def depack(func):
def unpack3(name, num, **content):
print(repr(content)) #{'k3': 3, 'k2': 2, 'k1': 1}
print(', '.join(name*time for name,time in content.items())) #k3k3k3, k2k2, k1
func(num, name)
return unpack3
@depack
def unpack(num, word):
print('hope num...{}'.format(num)) #hope num...76
print('hope stupid..'+word) #hope stupid..stupid
unpack(**dds)
輸出如下:
{'k3': 3, 'k2': 2, 'k1': 1}
k3k3k3, k2k2, k1
hope num...76
hope stupid..stupid