为什么Python 3需要dict.items用list()包装?
我正在使用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()的现有用法。
为什么这是必要的?
-
您可以放心地忽略此“额外预防措施”警告:
即使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中通过2to3
to进行转换features.items()
)。看来您的IDE认为代码是Python 2,因为您的for
声明在Python
3中非常好,因此不应警告有关Python 3的支持。