Syntaxiquement, comment ces deux instructions renvoient la même valeur?

x ,= range(1)
print(x) # prints 0

(x,) = range(1)
print(x) # here also prints 0
2
Nireekshan 16 avril 2018 à 17:26

3 réponses

Meilleure réponse

Il y a 2 opérations à l'œuvre:

  1. Construction de tuple
  2. Déballage séquentiel

Comme mentionné, la virgule fait une variable un tuple. Cela est vrai dans les deux cas.

De plus, ce sont des exemples de décompression de séquence . En d'autres termes, les éléments de range(1) sont décompressés et attribués aux éléments de tuple, dans ce cas (x, ).

Comme ce sont des tuples de longueur 1, l'élément unique décompressé de range(1), c'est-à-dire 0, est affecté à x.

2
jpp 16 avril 2018 à 14:36

Les deux sont des tuples, () en option

In [29]: a=x,

In [30]: b=(x,)

In [32]: type(a)
Out[32]: tuple

In [33]: type(b)
Out[33]: tuple

In [34]: 

Permet de dire que si vous mettez y après une virgule et faites range (2), il décompresse les deux valeurs et les affecte respectivement à x et y

In [36]: x,y=range(2)

In [37]: x,y
Out[37]: (0, 1)

In [38]: (x,y)=range(2)

In [39]: x,y
Out[39]: (0, 1)
0
Roushan 16 avril 2018 à 14:34

Vérifiez ceci par exemple:

v1 = 1,
v2 = (1,)

type(v1)  # outputs <type 'tuple'>
type(v2)  # outputs <type 'tuple'> 

La virgule crée un tuple à partir de l'expression tandis que les parenthèses sont simplement facultatives.

1
Ivan Velichko 16 avril 2018 à 14:33