web-dev-qa-db-fra.com

Les noms de variables dans Python ne peut pas commencer par un nombre ou le peuvent-ils?

C'est quelque peu académique, mais néanmoins.

La syntaxe Python interdit de démarrer un nom de variable avec un nombre, mais cela peut être contourné comme suit:

>>> globals()['1a'] = 1
>>> globals()['1a']
1

De même pour locals().

Est-ce à dire que Python le permet réellement, et que ce n'est tout simplement pas très visible?

modifier:

Ma question n'est pas de savoir si c'est permis; Je suis conscient qu'il n'est formellement pas autorisé en Python. La question est de savoir pourquoi puis-je contourner ce problème en adressant directement globals(), et si cela enfreint certaines règles ou directives, ou s'il peut même avoir une bonne raison/application pour le permettre.

23
steffen

L'analyseur Python interdit de nommer les variables de cette façon, pour l'analyse des nombres et des variables séparément, car nommer une variable 1e1 Créerait un chaos - est-ce le nombre 10.0 Ou la variable 1e1?

"Python, veuillez sortir pour moi 1e1!" - "Pourquoi est-ce 10.0? J'en ai stocké 100 là-bas!"

Mais les variables sont en fait stockées d'une manière qui permet de lier une chaîne qui commence par un nombre à une valeur, car cette fonctionnalité n'est pas nuisible dans les cartes de hachage de toute sorte, et donc en utilisant cette "astuce", vous pouvez obtenir votre variable de nom à préfixe numérique sans nuire à la divisibilité de l'analyseur.

Je dirais que techniquement, nommer les variables de cette manière est pas une violation à python directives, mais c'est fortement déconseillé, et en règle générale inutile. Utiliser globals pour l'injection de variables est connu sous le nom de très mauvaise pratique et ce cas ne devrait pas être exceptionnel.


Bien sûr, python aurait pu utiliser un boîtier pour les chiffres comme des chaînes, disons *123*, Mais je crois que l'intention d'inventer python était de rendre la programmation plus facile, sans étirer les limites de l'espace de nommage des variables.


En pratique, si vous devez utiliser des noms à en-tête, vous feriez mieux de le faire avec votre propre dictionnaire, plutôt que globals:

>>> number_headed_vars = {'1a': 100}
>>> number_headed_vars['1a']
100

De cette façon, vous pouvez créer votre propre système de variables - et éviter d'abuser de globals().

18
Uriel

Voici ce que vous pouvez et ne pouvez pas faire avec cela 1a dans les globaux. Vous ne pouvez pas vraiment l'utiliser dans une variable, sauf si vous utilisez toute sa définition dans les globaux (je veux dire accéder à ce dictionnaire), ce qui le rend très inconfortable pour l'utilisation (une autre raison de ne pas le faire).

Fondamentalement, 1a n'est pas une vraie variable comme a1, comme illustré dans la sortie suivante:

>>> globals()['1a'] = 1
>>> globals()['1a']
1

>>> a = 1a
File "<stdin>", line 1
    a = 1a
         ^
SyntaxError: invalid syntax

>>> a = globals()['1a']
>>> a
1

>>> globals()['a1'] = 5
>>> a = a1
>>> a
5
7
Ofer Arial