teclado raw_input numero introducir imprimir declarar datos como comando capturar python tuples variable-assignment comma

raw_input - python input()



¿Cómo funciona el operador de coma de Python durante la asignación? (3)

Puede pensar en las asignaciones que suceden en paralelo en copias en lugar de secuencialmente y en el lugar.

Esta es la razón por la que en Python no necesitas una función de intercambio:

a, b = b, a

trabaja suficientemente sin requerir una variable temporal, c .

Estaba leyendo las declaraciones de asignación en los documentos de Python ( http://docs.python.org/reference/simple_stmts.html#assignment-statements ).

En eso se cita que:

Si el objetivo es una lista de objetivos entre paréntesis o entre corchetes: el objeto debe ser iterable con el mismo número de elementos, ya que hay objetivos en la lista de objetivos, y sus elementos se asignan, de izquierda a derecha, al correspondiente objetivos

Después de leerlo, pensé en escribir una muestra como esta:

a = 5 b = 4 a, b = a + b, a print a, b

Mi suposición era que a y b deberían tener el valor de 9.

Sin embargo, estoy equivocado. ''a'' tiene el valor de 9 y ''b'' tiene el valor de 5.

¿Puede alguien ayudarme a entender esto mejor? ¿Por qué se asigna el valor más antiguo de ''a'' en lugar del nuevo? Según los documentos, el valor de a se asignará primero, ¿verdad? ¿Me estoy perdiendo de algo?


Python no tiene un "operador de coma" como en C. En cambio, la coma indica que se debe construir una tupla. El lado derecho de

a, b = a + b, a

es una tupla con los dos elementos a + b y a .

En el lado izquierdo de una asignación, la coma indica que el desempaquetado de la secuencia debe realizarse de acuerdo con las reglas citadas: a se le asignará el primer elemento de la tupla, b el segundo.


Todas las expresiones a la derecha del operador de asignación se evalúan antes de realizar cualquiera de las asignaciones.

Del tutorial de Python: Primeros pasos hacia la programación :

La primera línea contiene una asignación múltiple: las variables a y b obtienen simultáneamente los nuevos valores 0 y 1. En la última línea se usa nuevamente, lo que demuestra que las expresiones en el lado derecho se evalúan primero antes de cualquiera de las asignaciones. tener lugar Las expresiones del lado derecho se evalúan de izquierda a derecha.

Énfasis mío.

Su código es funcionalmente equivalente a lo siguiente:

a, b = 5 + 4, 5 print a, b