在写函数或者方法的时候,如果无法确定参数的个数,可以用*args
来代替。
那么*args
到底是什么呢,在函数方法里用的时候还要不要带*呢?
由于最近在写一些东西的时候遇到了这样的困惑,于是写了个小程序来验证下。
#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)
分别传进去一个元组,一个列表和两个字符串
输出结果如下
('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',)
可以看到,传进去元组和列表的效果是差不多的
args就是你传进去的参数的组成的一个元组
而*args
则是具体的多个参数,有一点值得注意,那就是当你传进去一个元组或者列表的时候,*args
会自动把他们拆开成各个元素,当成一堆参数
虽然你只传进去了一个元组,所以得要注意了,如果你是要把这个元组当成一整个参数来用,那么就不能用*args