Tengo una pregunta sobre la función map
en Python.Función de mapa Python, pasando por referencia/valor?
Por lo que entiendo, la función no muta la lista en la que está operando, sino que crea una nueva y la devuelve. Es esto correcto ?
Además, tengo el siguiente fragmento de código
def reflect(p,dir):
if(dir == 'X'):
func = lambda (a,b) : (a * -1, b)
else:
func = lambda (a,b) : (a, b * -1)
p = map(func,p)
print 'got', p
points
es una matriz de tuplas como: [(1, 1), (-1, 1), (-1, -1), (1, -1)]
Si llamo la función anterior de tal manera:
print points
reflect(points,'X')
print points
la lista points
no cambia. Sin embargo, dentro de la función, la función de impresión imprime correctamente lo que quiero.
¿Podría alguien señalarme en alguna dirección donde podría aprender cómo funciona todo esto pasando por el valor/referencia, etc. en python, y cómo podría solucionar lo anterior? O tal vez estoy tratando demasiado duro para emular Haskell en Python ...
Gracias
edición:
decir en lugar de p = map(func,p)
Yo
for i in range(len(p)):
p[i] = func(p[i])
El valor de la lista es actualizado fuera de la función, como si trabajara por referencia. Ugh, espero que esto esté claro: S
¿Podría explicar un poco más explícitamente cuál es su pregunta/problema? La referencia a Haskel no es muy útil para los programadores que no son Haskel. – Achim
Hola.Sí, lo siento por esto, tal vez simplemente ignore el comentario de Haskell. Me sorprende que aunque hago 'p = map (func, p)', la lista p no se cambia fuera de la función. Si reemplazo 'p = map (func, p)' con una iteración de lista, parece que funciona. – rafalio
Python no pasa por valor ni pasa por referencia, python pasa por objeto. –