.0 in name
Ralf M.
Ralf_M at t-online.de
Sat May 28 16:33:38 EDT 2022
Am 13.05.2022 um 23:23 schrieb Paul Bryan:
> On Sat, 2022-05-14 at 00:47 +0800, bryangan41 wrote:
>
>> May I know (1) why can the name start with a number?
>
> The name of an attribute must be an identifier. An identifier cannot
> begin with a decimal number.
I'm not sure about the first statement. Feeding
[print("locals:", locals()) or c for c in "ab"]
to the REPL, the result is
locals: {'.0': <str_iterator object at 0x0000000002D2B160>, 'c': 'a'}
locals: {'.0': <str_iterator object at 0x0000000002D2B160>, 'c': 'b'}
['a', 'b']
i.e. there is a variable of name .0 in the local namespace within the
list comprehension, and .0 is definitely not an identifier.
I came across this while investigating another problem with list
comprehensions, and I think the original post was about list comprehensions.
There also can be non-identifier names in the global namespace and as
attributes, e.g. using the REPL again:
globals()["42"] = "The Answer"
globals()
outputs (see last entry)
{'__name__': '__main__', '__doc__': None, '__package__': None,
'__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__':
None, '__annotations__': {}, '__builtins__': <module 'builtins'
(built-in)>, '42': 'The Answer'}
and
class Cls:
def __init__(self, lst):
for i, e in enumerate(lst):
self.__dict__[str(i)] = e
obj = Cls([31, 42, 53])
getattr(obj, "1")
works and outputs
42
>> (2) where in the doc is it?!
>
> https://docs.python.org/3/reference/lexical_analysis.html#identifiers
That refers to identifiers, i.e. names that are recognised as such by
the lexer, i.e. that can be written directly in Python source code.
As shown above, names that are not identifiers can be used in several
namespaces and as attributes. It's just a bit harder to use
non-identifier names than identifiers.
Whether it's a good idea to use them at all is a different question.
I think the OP wondered about the .0 in the local namespace within list
comprehensions. Unfortunately I cannot say much about that.
> Paul
Ralf M.
More information about the Python-list
mailing list