Python 中的变量名可以以整数开头吗?

Can variable names in Python start with an integer?

这有点学术性,但仍然如此。

Python 语法禁止变量名以数字开头,但这可以像这样回避:

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

locals().

也是如此

这是否意味着 Python 实际上允许它,而且它不是很明显?

编辑:

我的问题不是是否允许;我知道 Python 正式不允许这样做。问题是为什么我可以通过直接解决 globals() 来解决这个问题,如果这违反了某些规则或准则,或者它是否有很好的 reason/application 允许这样做。

这是您在全局变量中可以和不能用 1a 做的事情。你不能真正在变量中使用它,除非你在全局变量中使用它的所有定义(我的意思是访问那个字典),这使得使用起来非常不舒服(不这样做的另一个原因)。

基本上,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

Python 解析器禁止以这种方式命名变量,为了分别解析数字和变量,因为命名变量 1e1 会造成混乱 - 是数字 10.0或变量 1e1?

"Python, please output for me 1e1!" - "Why is it 10.0? I stored 100 over there!"

但是变量实际上以允许将以数字开头的字符串绑定到值的方式存储,因为该功能对任何类型的散列映射都无害,所以使用这个 "trick" 你可以在不损害解析器可分割性的情况下实现你想要的 numeral-prefixed-name 变量。

我想说,从技术上讲,以这种方式命名变量 不违反 对 python 的指导方针,但这是非常不鼓励的,并且通常是不必要的。使用 globals 注入变量被认为是一种非常 糟糕的做法,这种情况不应该是一个突出的问题。


当然,python 可以对字符串等数字使用包围符,比如 *123*,但我相信发明 python 的目的是让编程更容易,而不是扩展变量命名的限制 space。


实际上,如果您必须使用number-headed名字,您最好使用自己的字典,而不是globals:

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

这样您就可以创建自己的变量系统 - 并避免滥用 globals()