Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python scoping in dict comprehension

>>> x = 'foo'
>>> {0: locals().get('x')}
{0: 'foo'}
>>> {0: locals().get('x' + spam) for spam in ['']}
{0: None}

What is the reason for this discrepancy in behaviour?

like image 925
wim Avatar asked Oct 29 '12 06:10

wim


1 Answers

Dict comprehensions and generator comprehensions create their own local scope. List comprehensions do not in Python 2.x, but do in Python 3. (Note that your first example is not a dict comprehension. It's just a literal dict that happens to have an expression as the value for the key 0.)

like image 178
BrenBarn Avatar answered Oct 23 '22 04:10

BrenBarn