Pregunta

He estado mirando pasar matrices, o listas, como Python tiende a llamarlos, en una función.

He leído algo acerca del uso de args *, como por ejemplo:

def someFunc(*args)
    for x in args
        print x

Pero no estoy seguro si esto es correcto / incorrecto. Nada parece funcionar como yo quiero. Estoy acostumbrado a ser capaz de pasar matrices en función de PHP con facilidad y esto me está confundiendo. También parece que no puedo hacer esto:

def someFunc(*args, someString)

A medida que arroja un error.

Creo que sólo tengo a mí mismo completamente confundido y buscando a alguien para desactivarla para mí.

¿Fue útil?

Solución

Al definir su función utilizando la siguiente sintaxis:

def someFunc(*args)
    for x in args
        print x

Usted está diciéndole que se espera un número variable de argumentos. Si desea pasar de una lista (matriz de otras lenguas) que haría algo como esto:

def someFunc(myList = [], *args)
    for x in myList:
        print x

A continuación, se le puede llamar con esto:

items = [1,2,3,4,5]

someFunc(items)

Es necesario definir los argumentos con nombre antes de argumentos variables y argumentos variables antes de argumentos de palabra clave. Usted también puede tener este aspecto:

def someFunc(arg1, arg2, arg3, *args, **kwargs)
    for x in args
        print x

que requiere al menos tres argumentos y soportes número variable de argumentos y otros argumentos de palabra clave.

Otros consejos

Puede pasar listas al igual que otros tipos:

l = [1,2,3]

def stuff(a):
   for x in a:
      print a


stuff(l)

Esto imprime la lista l. Tenga en mente las listas se hacen pasar como referencias no como una copia profunda.

listas de Python (que no son sólo las matrices debido a que su tamaño se puede cambiar sobre la marcha) son normales objetos Python y se pueden pasar a funciones como cualquier variable. La sintaxis * se utiliza para desempaquetar las listas, lo que probablemente no es algo que desea hacer ahora.

No es necesario utilizar el asterisco para aceptar una lista.

Simplemente dar el argumento de un nombre en la definición, y pasar en una lista como

def takes_list(a_list):
    for item in a_list:
         print item
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top