dict理解中的Python作用域


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

这种行为差异的原因是什么?


问题答案:

Dict理解和生成器理解创建了自己的局部作用域。列表推导在Python 2.x中不是,但在Python
3中是。(请注意,您的第一个示例不是dict推导。它只是一个文字dict,碰巧有一个表达式作为键0的值。)