ste*_*fen 24 python variable-names
这在某种程度上是学术性的,但不过.
Python语法禁止使用数字启动变量名称.但这可以像这样回避:
>>> globals()['1a'] = 1
>>> globals()['1a']
1
Run Code Online (Sandbox Code Playgroud)
同样地locals().
这是否意味着,Python实际上允许它,只是不是很明显?
编辑:
我的问题不是,是否允许.我知道,它在Python中是正式不允许的.问题是为什么我可以通过globals()直接解决来解决它,并且这会破坏其他规则或指导方针,甚至可能有一个很好的理由/应用程序来允许它.
Uri*_*iel 19
Python解析器禁止以这种方式命名变量,为了分别解析数字和变量,因为命名变量1e1会产生混乱 - 是数字10.0还是变量1e1?
"Python,请输出给我1e1!" - "为什么是10.0?我在那里存储了100个!"
但变量实际上是以允许将以数字开头的字符串绑定到某个值的方式存储的,因为该功能对任何类型的散列映射都没有害处,所以使用这个"技巧"你可以实现你想要的数字 - prefixed-name变量,不会损害解析器的可分割性.
我会说技术上,以这种方式命名变量并不违反 python准则,但它非常气馁,并且通常是不必要的.使用globals注射变量被称为一个非常不好的做法和这种情况下,不应该是一个优秀的.
当然,python本可以使用封装器来表示像字符串这样的数字*123*,但我相信发明python的目的是使编程更容易,而不是扩展变量命名空间的限制.
实际上,如果你必须使用数字头名,你最好使用自己的字典,而不是globals:
>>> number_headed_vars = {'1a': 100}
>>> number_headed_vars['1a']
100
Run Code Online (Sandbox Code Playgroud)
这样你就可以创建自己的变量系统 - 并避免滥用globals().
这是你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
Run Code Online (Sandbox Code Playgroud)