2011-11-10 7 views
12

¿Qué hace el operador de estrella a la lista de argumentos de entrada en este ejemplo?Propósito del operador de estrella cuando se usa en la lista

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

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

Concretamente, si se me acaba el programa con el operador estrella imprime:

name <type 'str'> 

si se ejecuta sin la estrella main(sys.argv) imprime:

name <type 'list'> 
+0

posible duplicado de [¿Qué hace ** y * hacer para los parámetros de python?] (Http://stackoverflow.com/questions/36901/what-does-and-do-for-python-parameters) –

Respuesta

26

El operador *unpacks an argument list. Le permite llamar a una función con los elementos de la lista como argumentos individuales.

Por ejemplo, si sys.argv es ["./foo", "bar", "quux"], main(*sys.argv) es equivalente a main("./foo", "bar", "quux").

2
main(*sys.argv) 

llamadas main con el contenido de la lista sys.argv como argumentos respectivos del main método y es en este caso equivalente a:

main(sys.argv[0]) 

o

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

dependiendo de la longitud de sys.argv.

Así que si lo llamas con el asterisco, pasa a name el primer elemento de la lista sys.argv.

Si lo llamas sin el asterisco, pasa a name toda la lista sys.argv.

Cuestiones relacionadas