I've never come across this before. Here's a minimal example (in Python 3.4):
Code:
---------------------------------------------------------------------
d = {0:"a", 1:"b", 2:"c", 3:"d"}
e = [d[x] for x in (0,2)]
class Foo:
f = {0:"a", 1:"b", 2:"c", 3:"d"}
print(f)
g = [f[x] for x in (0,2)]
foo = Foo()
Output:
---------------------------------------------------------------------
{0: 'a', 1: 'b', 2: 'c', 3: 'd'}
Traceback (most recent call last):
File "minimal example.py", line 6, in <module>
class Foo:
File "minimal example.py", line 9, in Foo
g = [f[x] for x in (0,2)]
File "minimal example.py", line 9, in <listcomp>
g = [f[x] for x in (0,2)]
NameError: name 'f' is not defined
---------------------------------------------------------------------
When I am working in the top-level namespace, I get no errors when referencing
the dictionary, d, inside the list comprehension which generates e.
When I am working inside the class namespace, the print function call on line 8
recognizes the name f and prints the dictionary bound to that name.
However, the LIST COMPREHENSION defined inside the class namespace generates a
NameError.
In all my years of Python programming, I guess that I have never tried to
define a class attribute using a list comprehension. Why doesn't it work? Any
advice, and suggestions for Pythonic workarounds, are appreciated.
--
https://mail.python.org/mailman/listinfo/python-list