read - Pasar una matriz/lista a Python
send args to python (4)
He estado viendo pasar matrices, o listas, como Python tiende a llamarlas, en una función.
Leí algo sobre el 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 poder pasar arreglos en la función de PHP con facilidad y esto me confunde. También parece que no puedo hacer esto:
def someFunc(*args, someString)
Como arroja un error.
Creo que me confundí por completo y busqué a alguien que me lo aclare.
Cuando defines tu función usando esta sintaxis:
def someFunc(*args)
for x in args
print x
Le está diciendo que espera una cantidad variable de argumentos. Si quieres pasar una lista (matriz de otros idiomas) harías algo como esto:
def someFunc(myList = [], *args)
for x in myList:
print x
Entonces puedes llamarlo con esto:
items = [1,2,3,4,5]
someFunc(items)
Debe definir los argumentos con nombre antes de los argumentos de variable y los argumentos de variable antes de los argumentos de palabra clave. También puedes tener esto:
def someFunc(arg1, arg2, arg3, *args, **kwargs)
for x in args
print x
Que requiere al menos tres argumentos y admite números variables de otros argumentos y argumentos de palabra clave.
Las listas de Python (que no son solo matrices porque su tamaño se puede cambiar sobre la marcha) son objetos normales de Python y se pueden pasar a funciones como cualquier variable. La sintaxis * se utiliza para desempaquetar listas, que probablemente no sea algo que quiera hacer ahora.
No necesita usar el asterisco para aceptar una lista.
Simplemente asigne un nombre al argumento en la definición, y pase una lista como
def takes_list(a_list):
for item in a_list:
print item
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 cuenta que las listas se pasan como referencias, no como una copia profunda.