Имена переменных в Python не могут начинаться с числа или могут?

это несколько академично, но тем не менее.

синтаксис Python запрещает запуск имени переменной с номером. Но это можно обойти так:

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

аналогично для locals().

означает ли это, что Python действительно позволяет это, просто не очень видно?

edit:

мой вопрос не в том, разрешено ли это. Я знаю, что это формально не разрешено в Python. Вопрос почему я могу работать вокруг него, обращаясь globals() напрямую, и это нарушает другие правила или рекомендации, может быть, даже есть веская причина/приложение, чтобы позволить это.

2 ответов


Python parser запрещает именование переменных таким образом, для разбора чисел и переменных отдельно, как именование переменной 1e1 создаст хаос - это число 10.0 или переменной 1e1?

"Python, пожалуйста, выведите для меня 1e1!"- "Почему 10.0? Я хранил 100 вон там!"

но переменные фактически хранятся таким образом, который позволяет привязать строку, начинающуюся с числа, к значению, потому что эта функция не вредит при хешировании карт любого рода, и поэтому, используя этот "трюк", вы можете достичь желаемой переменной с префиксом числа, не повредив разделяемость парсера.

Я бы сказал, что технически именование переменных таким образом не нарушение к руководящим принципам python, но это очень не рекомендуется и, как правило, ненужно. Используя globals для инъекции переменных известен как очень плохая практика и этот случай не должен быть выдающимся.


конечно, python мог бы использовать encloser для цифр, таких как строки, скажем *123*, но я считаю, что цель изобретения python заключалась в том, чтобы упростить Программирование, не растягивая пределы пространства имен переменных.


практически говоря, если вы должны используйте имена с цифрами, вам лучше сделать это со своим собственным словарем, а не globals:

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

таким образом, вы можете создать свой собственный переменные системы-и избегайте злоупотребления globals().


это то, что вы можете и не можете делать с этим 1a в Globals. Вы не можете использовать его в переменной, если вы не используете все его определения в глобалах (я имею в виду доступ к этому словарю), что делает его очень неудобным для использования (еще одна причина не делать этого).

по сути, 1a не является реальной переменной как a1 , как показано ниже:

>>> 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