在这个例子中,星号运算符对输入参数列表做了什么?
def main(name, data_dir='.'):
print 'name', type(name)
if __name__ == '__main__':
main(*sys.argv)
具体来说,如果我使用星号运算符运行该程序,它将打印:
name <type 'str'>
如果不加星号运行main(sys.argv)
,它会打印:
name <type 'list'>
在这个例子中,星号运算符对输入参数列表做了什么?
def main(name, data_dir='.'):
print 'name', type(name)
if __name__ == '__main__':
main(*sys.argv)
具体来说,如果我使用星号运算符运行该程序,它将打印:
name <type 'str'>
如果不加星号运行main(sys.argv)
,它会打印:
name <type 'list'>
*
运算符解压参数列表。它允许你将列表中的每个元素作为单独的参数来调用函数。
例如,如果sys.argv
是 ["./foo", "bar", "quux"]
,那么 main(*sys.argv)
等同于 main("./foo", "bar", "quux")
。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
。