编程语言
首页 > 编程语言> > 为什么Python 3需要用list()包装dict.items?

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

作者:互联网

我正在使用Python 3.我刚刚安装了一个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提到这一点

It also wraps existing usages of dict.items(), dict.keys(), and dict.values() in a call to list.

为什么这有必要?

解决方法:

您可以放心地忽略这个“额外的预防措施”警告:即使没有两个版本的Python列表,您的代码也会工作相同.如果你需要一个列表(但事实并非如此),它将以不同的方式运行:事实上,features.items()是Python 2中的一个列表,但是Python 3中的一个列表.它们在用作可迭代时的工作方式相同,在你的例子中.

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

具体来说,这意味着Python 2代码可以显式迭代视图:for k,v in features.viewitems()(将在Python 3中通过2to3转换为features.items()).看起来你的IDE认为代码是Python 2,因为你的for语句非常好,在Python 3中,所以不应该有关于Python 3支持的警告.

标签:python,python-3-x,python-2to3
来源: https://codeday.me/bug/20190930/1835767.html