星号运算符在列表中的作用
在这个例子中,星号操作符对输入参数列表做了什么呢?
def main(name, data_dir='.'):
print 'name', type(name)
if __name__ == '__main__':
main(*sys.argv)
具体来说,如果我用星号操作符运行这个程序,它会打印:
name <type 'str'>
如果不使用星号,直接运行 main(sys.argv)
,它会打印:
name <type 'list'>
2 个回答
3
main(*sys.argv)
这个代码是用来调用 main
函数的,它把列表 sys.argv
中的内容作为参数传给 main
方法。在这种情况下,它的意思是:
main(sys.argv[0])
或者
main(sys.argv[0], sys.argv[1])
这取决于 sys.argv
的长度。
所以如果你用星号(*)来调用它,它会把列表 sys.argv
的第一个元素传给 name
。
如果你不使用星号,它会把整个列表 sys.argv
传给 name
。
54
*
这个符号叫做“解包运算符”。它的作用是把一个列表里的元素拆开,让你可以把这些元素当作单独的参数来调用一个函数。
举个例子,如果sys.argv
的内容是["./foo", "bar", "quux"]
,那么main(*sys.argv)
就相当于main("./foo", "bar", "quux")
,也就是说它把列表里的每个元素都单独传给了main
这个函数。