Domanda

Questo è uno degli esempi più brevi che ho scritto da molto tempo

Creo e aggiorno un tuple3

In [65]: arf=(0,1,[1,2,3])

In [66]: arf=(arf[0],arf[1], arf[2] )

In [67]: arf
Out[67]: (0, 1, [1, 2, 3])

Quindi la riassegnazione ha funzionato.

Ora cerco di cambiare il suo contenuto.

In [69]: arf=(arf[0],arf[1], [2] )

In [70]: arf
Out[70]: (0, 1, [2])

In [71]: arf=(arf[0],arf[1], arf[2].append(3) )

In [72]: arf
Out[72]: (0, 1, None)

Non ne riavro ' Nessuno???Ehi, cosa dà?Scusa, sono un pitone noob.

È stato utile?

Soluzione

list.append() ritorna sempre None

cosi arf[2].append(3) aggiungerà 3 per arf e ritorno None

non si arriva mai a vedere questo cambiamento per arf[2] perché si sta immediatamente rebinding arf alla tupla appena creata

Forse è questo che vuoi

arf = (arf[0], arf[1], arf[2]+[3])

Altri suggerimenti

Il list.append metodo cambia l'elenco in atto e restituisce None.Questo non è un bug, questo è solo il modo in cui il append il metodo funziona.

append non restituisce la nuova lista, modifica quella vecchia sul posto:

>>> a = [1, 2, 3]
>>> b = a.append(4)
>>> print b
None
>>> print a
[1, 2, 3, 4]

Per approfondire la risposta di gnibbler, list.append () cambia la lista stessa, ma non restituisce il nuovo valore della lista.Ritorna None.Quindi il tuo comando 71 cambia il valore di arf[2] nel modo desiderato, ma poi ritorna immediatamente None e imposta arf [2] a quello.

L'auto-riferimento nel tuo esempio offusca un po ' le cose, ma se provi un comando come someothervariable=arf[2].append(3), vedrai come funziona. someothervariable è impostato su None e arf [2] ha aggiunto 3 senza un'istruzione di assegnazione esplicita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top