Me preguntaba sobre las asignaciones de variables y por qué está permitido:

a = 1, 2

a = b = 1

Pero esto no está permitido:

a, b = 1

¿Cuál es la lógica detrás? Gracias

-1
tentkl 28 oct. 2017 a las 15:58

3 respuestas

La mejor respuesta

Asumiré que puede estar familiarizado con un lenguaje como C / C ++, que es un lenguaje de tipo estático. Esto significa que el tipo de una variable debe declararse al inicializar una variable (por ejemplo, diría int a;).

En C / C ++, la sintaxis que está intentando hacer es una sintaxis válida al hacer int a, b = 1; (por ejemplo), porque estamos inicializando dos variables, a y b, para que sean enteros, donde la segunda estamos asignar un valor 1.

Sin embargo, Python es un lenguaje de tipo dinámico: no es necesario declarar el tipo de la variable. Por lo tanto, cuando hacemos a, b = 1, en realidad estamos usando una característica que Python tiene que se llama "desempaquetar". Python está tratando de descomprimir 1 en las variables a y b, pero esto no es posible ya que 1 es solo una sola pieza de datos - No es una lista o una tupla o lo que sea.

Debido a que Python se escribe dinámicamente, no podemos simplemente iniciar una variable y no darle ningún valor (como lo hacemos en C cuando hacemos int a;). Cuando haces a, b = 1, está intentando iterar a través de 1 y asignar su contenido a las variables a y b. Por lo tanto, el error TypeError: 'int' object is not iterable.

3
TerryA 28 oct. 2017 a las 13:04

En el primer caso, Python supone que a es una tupla de 1 y 2

>>> a = 1, 2
>>> a
(1, 2)

Pero a, b = 1 desea dar valores a ayb, por lo que debe haber dos valores para ellos, pero solo está proporcionando uno, es decir, 1. Si tiene una longitud iterable de 2, entonces funcionaría.

>>> a, b = [6, 7]
>>> a
6
>>> b
7
0
Siddharth 28 oct. 2017 a las 13:05

En python cuando le das dos números / cadenas con, el intérprete de python piensa que es una tupla

  a = 1, 2

En la línea anterior estás creando un objeto tupla llamado

 a, b = 1

En la línea anterior, la sintaxis del lado izquierdo es para una tupla, por lo que en el lado derecho espera un valor de tupla

a,b = 1,1

Obras

0
Sandeep Lade 28 oct. 2017 a las 13:30