设置理解不符合预期

时间:2018-05-23 14:52:02

标签: python python-2.7 set-comprehension

需要帮助解释为什么此代码段不会像我期望的那样返回

>>> a = 1
>>> v = ["a", "b", "c"]
>>> {e for e in v if locals().get(e) is None}
set(['a', 'c', 'b'])

我希望它返回set(['c', 'b']),就像我建立一个列表

一样
>>> [e for e in v if locals().get(e) is None]
['b', 'c']

1 个答案:

答案 0 :(得分:6)

在Python 2中,集合和字典理解有自己的范围;这样的构造中的import { Component } from '@angular/core'; @Component({ selector: 'app-number-per-page', templateUrl: './number-per-page.component.html', styleUrls: ['./number-per-page.component.scss'] }) export class NumberPerPageComponent { resultNumber = 10; constructor() { } } 引用了新的嵌套范围。

列表推导没有,因为它们是在语言生命周期的早期实现的,之后开发人员意识到新范围会更好。在Python 3中,列表推导也有自己的范围。

您可以通过在运行您的集合理解之前创建locals()返回的字典的单个引用来解决此问题:

locals()