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

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

4

1 回答 1

14

字典推导和生成器推导创建自己的本地范围。列表推导在 Python 2.x 中没有,但在 Python 3 中提供。(请注意,您的第一个示例不是 dict 推导。它只是一个文字 dict,恰好有一个表达式作为键 0 的值。)

于 2012-10-29T06:49:09.873 回答