Perché non superare il problema completamente?
def square(vals):
return [v*v for v in vals]
Edit: Il primo problema, come molte persone hanno fatto notare, è che si sono in corto circuito il ciclo for
. Il tuo return
dovrebbe essere dopo il il ciclo, non in esso.
Il prossimo problema è l'utilizzo di list.append
- è necessario chiamarlo, non assegnarlo ad esso, ovvero result.append(y*y)
. result.append = y*y
sovrascrive invece il metodo con un valore numerico, probabilmente generando un errore la prossima volta che provi a chiamarlo.
volta a risolvere che, troverete un altro errore meno evidente si verifica se si chiama la funzione più volte:
print(square([1,2,3]) # => [1, 4, 9]
print(square([1,2,3]) # => [1, 4, 9, 1, 4, 9]
Perché si passa un oggetto mutabile (una lista) come impostazione predefinita, ogni ulteriore uso di tale l'elemento predefinito punta a lo stesso elenco originale.
Invece, tenta
def square(vals, result=None):
if result is None:
result = []
result.extend(v*v for v in vals)
return result
fonte
2016-01-31 23:05:44
1. Non creare argomenti di default mutabili. 2. Puoi solo restituire una volta. – jonrsharpe
Quindi, come posso restituire un array come output. Puoi darmi qualche idea? Grazie –
Porta il ritorno fuori dal ciclo for. –