2011-11-10 9 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の内容方法と、この場合と等価である:

main(sys.argv[0]) 

又は

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

sys.argvの長さに応じ。

アスタリスクで呼び出すと、リストsys.argvの最初の要素nameに渡されます。

アスタリスクなしで呼び出すと、リスト全体がsys.argvnameに渡されます。

関連する問題