[python-uk] TDD stuff in London, next two weeks (and list comprehension scoping)

Michael Foord fuzzyman at voidspace.org.uk
Sun Jun 1 00:02:52 CEST 2014


On 31 May 2014, at 11:13, Jonathan Hartley <tartley at tartley.com> wrote:

> That's what I thought too, but:
> 
> $ python3
> Python 3.4.0 (default, Apr 19 2014, 12:20:10) 
> [GCC 4.8.1] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>> class Some(object):
> ...   tokens = ['a', 'b', 'c']
> ...   untokenized = [Some.tokens.index(a) for a in ['b']]
> ... 
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "<stdin>", line 3, in Some
>   File "<stdin>", line 3, in <listcomp>
> NameError: name 'Some' is not defined
> 

The name Some is not bound until the class body has finished executing. You should just be able to access the name "tokens" from inside the class body though:

 python3
Python 3.3.4 (v3.3.4:7ff62415e426, Feb  9 2014, 00:29:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class Some:
...     tokens = [1, 2, 3]
...     thing = [token ** 2 for token in tokens]
... 
>>> 

Michael

> 
> On 30/05/14 16:07, Sven Marnach wrote:
>> On 30 May 2014 15:49, Harry Percival <harry.percival at gmail.com> wrote:
>> I had the problem outside of a class body, in a normal function... 
>>  
>> The particular problem mentioned in the StackOverflow quesiton you linked only ever occurs inside class bodies.  They are the only enclosing scopes that are skipped in name lookups.  You can still access class attributes of the class by using ClassName.attribute inside the list comprehension, like you would have to do to access class attributes from inside methods.
>> 
>> Cheers,
>>     Sven
>> 
>> 
>> 
>> _______________________________________________
>> python-uk mailing list
>> 
>> python-uk at python.org
>> https://mail.python.org/mailman/listinfo/python-uk
> 
> -- 
> Jonathan Hartley    
> tartley at tartley.com    http://tartley.com
> 
> Made of meat.       +44 7737 062 225       twitter/skype: tartley
> 
> 
> _______________________________________________
> python-uk mailing list
> python-uk at python.org
> https://mail.python.org/mailman/listinfo/python-uk


--
http://www.voidspace.org.uk/


May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing 
http://www.sqlite.org/different.html







More information about the python-uk mailing list