Selon Issue23275, ce sont essentiellement les caprices causant pas de préjudice réel, mais aussi pas d'utilité. Notez que [] = ()
ne modifie pas l' list
littérale:
>>> [] = ()
>>> type([])
<class 'list'>
[] = x
états fondamentalement affirmer qu' x
est itératif et qu' x
est vide (bien que personne ne vous recommandons de les utiliser de cette façon), par exemple
>>> [] = (1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> [] = (1,)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Comme Jean-Y des commentaires, il est préférable de penser en termes de [] = ()
comme non pas une commande mais une manière d'être compatible avec Python itérable déballage de la syntaxe.
Comme ArrowCase commentaires, cette syntaxe s'étend également à des missions multiples:
>>> a = [] = ()
>>> a
()
En regardant les Disponible bytecode de l'affectation multiple montre que ces opérations sont similaires à la normale itérable déballage de la syntaxe, à l'aide de l' UNPACK_SEQUENCE
enseignement:
>>> dis.dis('a = [] = ()')
1 0 BUILD_TUPLE 0
2 DUP_TOP
4 STORE_NAME 0 (a)
6 UNPACK_SEQUENCE 0
8 LOAD_CONST 0 (None)
10 RETURN_VALUE
>>> dis.dis('[a, b] = (1, 2)')
1 0 LOAD_CONST 3 ((1, 2))
2 UNPACK_SEQUENCE 2
4 STORE_NAME 0 (a)
6 STORE_NAME 1 (b)
8 LOAD_CONST 2 (None)
10 RETURN_VALUE
La même Issue23275 états qu' () = ()
a été ajouté comme valide la syntaxe de Python 3 pour la concordance. Il a été décidé que la suppression d' [] = ()
de casser le code inutilement, car il ne cause pas de préjudice et s'adapte avec itérable déballage de la logique. {} = ()
est toujours valide car le déballage de la syntaxe n'a pas de sens dans ce contexte avec des accolades.
Dans le cas où quelqu'un se demande, une syntaxe comme celle - list() = ()
est tout simplement syntaxiquement invalide, parce que vous pouvez ne jamais céder à l'appel de la fonction.