星号操作符在列表中的作用是什么?

28

在这个例子中,星号运算符对输入参数列表做了什么?

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个回答

53
* 运算符解压参数列表。它允许你将列表中的每个元素作为单独的参数来调用函数。 例如,如果sys.argv["./foo", "bar", "quux"],那么 main(*sys.argv)等同于 main("./foo", "bar", "quux")

3
main(*sys.argv)

使用列表sys.argv的内容作为main方法的各自参数,调用main方法,此时等同于:

main(sys.argv[0])

或者

main(sys.argv[0], sys.argv[1])

根据sys.argv的长度来决定。

如果您使用星号调用它,则将列表sys.argv的第一个元素传递给name

如果您不使用星号调用它,则将整个列表sys.argv传递给name


但是@Frédéric Hamidi显示了整个列表而不是第一个参数。为什么不只是main(“./foo”)而不是main(“./foo”,“bar”,“quux”)? - user2994783

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接