我正在查看2to3的输出,其中包括以下更改:
- for file_prefix in output.keys():
+ for file_prefix in list(output.keys()):
其中output
是一本字典.
这一变化的意义是什么?为什么2to3会这样做?
这一变化如何使代码与Python 3兼容?
我正在查看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()
,因为它没有索引.)