2011-11-10 19 views
12

Bu örnekte giriş argümanı listesine yıldız operatörü ne yapıyor? Ben yıldız operatörü ile programı çalıştırırsanızListede kullanıldığında yıldız operatörünün amacı

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

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

Somut olarak, bu yazdırır:

name <type 'str'> 

yıldızsız çalıştırırsanız main(sys.argv) o yazdırır:

name <type 'list'> 
+0

olası yinelenen [neyi ** ve * piton parametreleri için do?] (http://stackoverflow.com/questions/36901/what-does-and-do-for-python-parameters) –

cevap

26

* operatör unpacks an argument list. Liste öğeleri ile bir işlevi bağımsız argümanlar olarak çağırmanızı sağlar. Örneğin, sys.argv["./foo", "bar", "quux"] ise, main(*sys.argv)main("./foo", "bar", "quux") eşdeğerine eşdeğerdir. Örneğin, . arasında

2
main(*sys.argv) 

aramalar main ile'nın ilgili argümanları olarak listenin içeriği sys.argv

main(sys.argv[0]) 

veya

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

sys.argv uzunluğuna bağlı olarak:yöntemi ve bu durumda eşdeğer olan.

Eğer yıldız işareti ile çağırırsanız, listenin ilk öğesi sys.argv'a name geçer. Eğer yıldız işareti olmadan çağırırsanız

, bu name tüm liste sys.argv geçer.