Python, ¿es esto un error? Agregar a una lista dentro de una tupla da como resultado Ninguno?[duplicar]

StackOverflow https://stackoverflow.com//questions/9617906

Pregunta

Este es uno de los ejemplos más cortos que he escrito en mucho tiempo.

Creo y actualizo una tupla3

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])

Entonces la reasignación funcionó.

Ahora intento cambiar su contenido.

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)

Vuelvo Ninguno???Oye, ¿qué pasa?Lo siento, soy un novato en Python.

¿Fue útil?

Solución

list.append() siempre regresa None

entonces arf[2].append(3) agregará 3 a arf y volver None

nunca llegas a ver este cambio a arf[2] porque inmediatamente te estás volviendo a unir arf a la tupla recién creada

Quizás esto es lo que quieres

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

Otros consejos

El list.append El método cambia la lista en su lugar y regresa. None.Esto no es un error, así es como append El método funciona.

append no hace que [T devuelva la nueva lista, modifica el antiguo en el lugar:

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

Para profundizar en la respuesta de gnibbler, list.append() cambia la lista en sí, pero no devuelve el nuevo valor de la lista.Vuelve None.Entonces su comando 71 cambia el valor de arf[2] en la forma que deseaba, pero luego regresa inmediatamente None y establece arf[2] para eso.

La autorreferencia en tu ejemplo confunde un poco las cosas, pero si intentas un comando como someothervariable=arf[2].append(3), verás cómo funciona. someothervariable se establece en None y arf[2] tiene 3 añadido sin una declaración de asignación explícita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top