2017-06-15 1 views
0

En Python 3, vous ne pouvez pas affecter à True, False ou None. Mais, sur CPython au moins, vous pouvez assigner à NotImplemented.Pourquoi pouvez-vous attribuer à NotImplemented?

>>> False 
False 
>>> False = 42 
SyntaxError: can't assign to keyword                  ' 
>>> NotImplemented 
NotImplemented 
>>> NotImplemented = 42 
>>> NotImplemented 
42 

Quel est le raisonnement derrière cela?

Répondre

0

Les constantes Python enumerated here ne sont pas "constantes" (elles peuvent être réaffectées) sauf celles qui indiquent explicitement: "Les affectations à X sont illégales et déclenchent une erreur de syntaxe." Ce sont: False, True, None et __debug__. Cela est explicitement souligné dans une note:

Les noms None, False, True et __debug__ ne peuvent pas être réaffectés (missions à eux, comme un nom d'attribut, relevez SyntaxError), afin qu'ils puissent être considérés comme « vraies "constantes.

Il convient de noter que plus tard assigning to __debug__ only became illegal in version 2.7 et False et True. Il est possible dans une autre version, il peut être illégal d'attribuer à NotImplemented.