星号运算符在列表中的作用

28 投票
2 回答
24564 浏览
提问于 2025-04-17 06:01

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

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这个函数。

撰写回答