为什么Python 3需要dict.items用list()包装?

发布于 2021-01-29 17:09:20

我正在使用Python3。我刚刚安装了Python IDE,并对以下代码警告感到好奇:

features = { ... }
for k, v in features.items():
    print("%s=%s" % (k, v))

警告是: “对于Python3的支持应类似于…list(features.items())

http://docs.python.org/2/library/2to3.html#fixers上也对此有所提及

它还在对列表的调用中包装了dict.items(),dict.keys()和dict.values()的现有用法。

为什么这是必要的?

关注者
0
被浏览
150
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以放心地忽略此“额外预防措施”警告:
    即使list_在两个版本的Python中,代码都一样工作。如果需要一个列表,它将以不同的方式运行(但事实并非如此):实际上,在Python
    2中features.items()是一个 _列表
    ,但在Python 3中是一个
    视图
    。它们在用作可迭代对象时的作用相同,如您的示例。

    现在,Python 2到Python 3转换工具2to3在安全性方面有误,并假定您在使用时确实想要一个
    列表dict.items()。情况可能并非如此(如在问题中所示),在dict.items()Python
    3中,这种情况(不包装list)会更好(更快,并且内存消耗更少,因为没有构建列表)。

    具体来说,这意味着Python 2代码可以显式地遍历视图:(for k, v in features.viewitems()将在Python
    3中通过2to3to进行转换features.items())。看来您的IDE认为代码是Python 2,因为您的for声明在Python
    3中非常好,因此不应警告有关Python 3的支持。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看