在寫(xiě)函數(shù)或者方法的時(shí)候到千,如果無(wú)法確定參數(shù)的個(gè)數(shù)嘱巾,可以用*args
來(lái)代替。
那么*args
到底是什么呢锰蓬,在函數(shù)方法里用的時(shí)候還要不要帶*呢?
由于最近在寫(xiě)一些東西的時(shí)候遇到了這樣的困惑眯漩,于是寫(xiě)了個(gè)小程序來(lái)驗(yàn)證下芹扭。
#coding=utf-8
def test(*args):
print args
map(printargs, args)
map(printargs, *args)
print '\n'
def printargs(*args):
print args
tuple1 = ('hello', 'world')
list1 = ['hello', 'world']
test('hello', 'world')
test(tuple1)
test(list1)
分別傳進(jìn)去一個(gè)元組,一個(gè)列表和兩個(gè)字符串
輸出結(jié)果如下
('hello', 'world')
('hello',)
('world',)
('h', 'w')
('e', 'o')
('l', 'r')
('l', 'l')
('o', 'd')
(('hello', 'world'),)
(('hello', 'world'),)
('hello',)
('world',)
(['hello', 'world'],)
(['hello', 'world'],)
('hello',)
('world',)
可以看到赦抖,傳進(jìn)去元組和列表的效果是差不多的
args就是你傳進(jìn)去的參數(shù)的組成的一個(gè)元組
而*args
則是具體的多個(gè)參數(shù)舱卡,有一點(diǎn)值得注意,那就是當(dāng)你傳進(jìn)去一個(gè)元組或者列表的時(shí)候队萤,*args
會(huì)自動(dòng)把他們拆開(kāi)成各個(gè)元素轮锥,當(dāng)成一堆參數(shù)
雖然你只傳進(jìn)去了一個(gè)元組,所以得要注意了要尔,如果你是要把這個(gè)元組當(dāng)成一整個(gè)參數(shù)來(lái)用舍杜,那么就不能用*args