Имена переменных в 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