加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 设置理解不按预期行事

发布时间:2020-12-20 11:05:01 所属栏目:Python 来源:网络整理
导读:参见英文答案 Why do list comprehensions write to the loop variable,but generators don’t? ????????????????????????????????????6个 需要帮助解释为什么此代码段不会像我期望的那样返回 a = 1 v = ["a","b","c"] {e for e in v if locals().get(e) is
参见英文答案 > Why do list comprehensions write to the loop variable,but generators don’t? ????????????????????????????????????6个
需要帮助解释为什么此代码段不会像我期望的那样返回

>>> 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']

解决方法

在Python 2中,set和dictionary comprehensions有自己的范围;这样的构造中的locals()引用了新的嵌套作用域.

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

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

>>> l = locals()
>>> {e for e in v if l.get(e) is None}
{'c','b'}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读