我正在查看2to3的输出,其中包括以下更改:

-            for file_prefix in output.keys():
+            for file_prefix in list(output.keys()):

其中output是一本字典.

这一变化的意义是什么?为什么2to3会这样做?

这一变化如何使代码与Python 3兼容?

推荐答案

在Python3中,为了提高效率,.keys()方法返回的是视图对象而不是列表.

在迭代的情况下,这实际上并不重要,但重要的是,如果你做的是类似于foo.keys()[0]的事情——你不能为视图建立索引.因此,2to3总是添加一个显式列表转换,以确保任何潜在的索引不会中断.

你可以在任何一个视图可以正常工作的地方手动删除list()次通话;2to3只是不够聪明,无法分辨哪种情况是哪种情况.

(请注意,2.x版本可以调用iterkeys(),因为它没有索引.)

Python-3.x相关问答推荐

While循环不停止地等待,直到时间.睡眠结束

使用递归将int转换为字符串

如何将参数/值从测试方法传递给pytest的fixture函数?

给定panda代码的分组和百分比分布pyspark等价

如何创建与导航抽屉一起使用的导航栏

PyTest:尽管明确运行了测试,但是被标记为没有运行测试

如何查找以开头并替换的字符串

如果原始字符串包含正斜杠,如何返回具有不同可能性的新字符串

为什么 numpy 的 `np.char.encode` 会将一个空的 unicode 数组变成一个空的 `float64` 数组?

删除括号和大括号中不必要的空格

python中两个连续的yield语句如何工作?

Await Future 来自 Executor:Future 不能在await表达式中使用

为什么 Django South 1.0 使用 iteritems()?

Python 错误:IndexError:字符串索引超出范围

如何判断一个字符串是否包含有效的 Python 代码

python 3.4版不支持'ur'前缀

如何在 Python 中计算两个包含字符串的列表的 Jaccard 相似度?

向 Python 函数添加属性的最佳方法

如何对字典的函数输出列表进行单元测试?

如何修复:cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库 - Python