需要帮助解释为什么此代码段不会像我期望的那样返回
>>> 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']
答案 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()