2011-11-10 34 views
12

在此示例中,星號運算符對輸入參數列表做了什麼?在列表中使用星號運算符的目的

def main(name, data_dir='.'): 
    print 'name', type(name) 

if __name__ == '__main__': 
    main(*sys.argv) 

具體而言,如果我與明星的操作運行該程序將打印:

name <type 'str'> 

如果沒有星運行main(sys.argv)它打印:

name <type 'list'> 
+0

可能的重複[對Python參數有什麼**和*做什麼?](http://stackoverflow.com/questions/36901/what-does-and-do-for-python-parameters) –

回答

26

*運營商unpacks an argument list。它允許你使用列表項作爲單獨的參數來調用一個函數。

例如,如果sys.argv["./foo", "bar", "quux"],main(*sys.argv)相當於main("./foo", "bar", "quux")

2
main(*sys.argv) 

電話main與列表sys.argv的內容作爲的各自參數的方法和在這種情況下等效於:取決於sys.argv長度

main(sys.argv[0]) 

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

因此,如果您使用星號調用它,它將傳遞到name列表sys.argv的第一個元素。

如果您不帶星號稱呼它,它將傳遞到name整個列表sys.argv