关于传递参数时的*args探索

在写函数或者方法的时候,如果无法确定参数的个数,可以用*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

你可能感兴趣的:(关于传递参数时的*args探索)