Ho una domanda sulla funzione map
in Python.Funzione mappa Python, passando per riferimento/valore?
Da quello che ho capito, la funzione non muta la lista su cui sta operando, ma ne crea una nuova e la restituisce. È corretto ?
Inoltre, ho il seguente pezzo di codice
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
è un array di tuple quali: [(1, 1), (-1, 1), (-1, -1), (1, -1)]
Se chiamo la funzione precedente in modo tale:
print points
reflect(points,'X')
print points
l'elenco points
non cambia. All'interno della funzione, tuttavia, la funzione di stampa stampa correttamente ciò che voglio.
Qualcuno potrebbe indicarmi in qualche direzione in cui potrei imparare come tutto questo passaggio per valore/riferimento ecc funziona in python e come posso risolvere il problema precedente? O forse sto cercando troppo difficile da emulare Haskell in pitone ...
Grazie
edit:
Say invece di p = map(func,p)
Io
for i in range(len(p)):
p[i] = func(p[i])
Il valore della lista è aggiornato al di fuori della funzione, come se lavorasse per riferimento. Ugh, spero che questo sia chiaro: S
Potresti spiegare un po 'più esplicitamente qual è la tua domanda/problema? Il riferimento ad Haskel non è molto utile per i programmatori non Haskel. – Achim
Ehi.Sì, mi dispiace per questo, forse ignoro semplicemente il commento di haskell. Sono solo sorpreso dal fatto che anche se faccio 'p = map (func, p)', la lista p non è cambiata al di fuori della funzione. Se sostituisco 'p = map (func, p)' con una iterazione di lista, sembra funzionare. – rafalio
Python non passa né per valore né per riferimento, python passa per oggetto. –