Python parser forbids naming variables that way, for the sake of parsing numbers and variables separately, as naming a variable 1e1
would create a chaos - is it the number 10.0
or the variable 1e1
?
"Python, please output for me 1e1
!" - "Why is it 10.0? I stored 100 over there!"
But the variables are actually stored in a way that allows binding a string that starts with a number to a value, because that feature is no harm in hashing maps of any kind, and so using this "trick" you can achieve your wanted numeral-prefixed-name variable without hurting the parser severability.
I would say that technically, naming variables in that manner is not a violation to python guidelines, but it is highly discouraged, and as a rule unnecessary. Using globals
for injecting variables is known as a very bad practice and this case should not be an outstanding.
Of course, python could have used an encloser to numerals like strings, say *123*
, but I believe the intent of inventing python was to make programming easier, not stretching the limits of variable naming space.
Practically speaking, if you must use number-headed names you better do it with your own dictionary, rather than globals
:
>>> number_headed_vars = {'1a': 100}
>>> number_headed_vars['1a']
100
That way you can create your own variables system - and avoid abusing globals()
.
globals()
. But you're not really intended to do that. – Longerlocals
doesn't work [docs.python.org/3/library/functions.html#locals] so you can only do this trick inglobals
– Godsondef f(): locals()['a'] = 1; print(a)
(raises an error) or evendef f(): a=0; locals()['a']=1; print(a)
(prints 0) – Godson