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
3 réponses
Il y a 2 opérations à l'œuvre:
- Construction de tuple
- 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
.
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)
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.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.