Python-future: 替换 lib2to3.fixes.fix_dict 以避免不必要的 list() 调用

创建于 2017-09-08  ·  4评论  ·  资料来源: PythonCharmers/python-future

lib2to3.fixes.fix_dict将基本换到任何呼叫dict.keys().values().items()list()不管其上下文。

但是,据我所知,当结果直接迭代(例如for k, v in d.items() )或检查包含情况(例如if a in d.keys() )导致很多差异时,调用或多或少毫无意义-噪音恢复。

如果 python-future 有自己的 dict-iteration fixer 避免这种烦恼,那就太好了。

0.21 enhancement

最有用的评论

在字典中添加或删除条目时迭代视图可能会引发 RuntimeError 或无法迭代所有条目。

如果for循环内部正在添加或删除条目,则需要list()

所有4条评论

在字典中添加或删除条目时迭代视图可能会引发 RuntimeError 或无法迭代所有条目。

如果for循环内部正在添加或删除条目,则需要list()

我写了自己的“ fix_dict_methods ”来做到这一点:

"""Fixer for some dict methods.

Imports these compatibility methods from `future.utils`.

d.iterkeys() -> iterkeys(d)
d.iteritems() -> iteritems(d)
d.itervalues() -> itervalues(d)

d.viewkeys() -> viewkeys(d)
d.viewitems() -> viewitems(d)
d.viewvalues() -> viewvalues(d)
"""

对于逐步逐步实现未来化的 PY2 代码来说,它应该更安全。

它也没有将任何简单的.keys/values/items()调用包装在list()中,因为我还没有找到很多需要修复的地方,但我可能会在一个单独的步骤中跟进它- 如果我需要更改,我想我可以运行正常的fix_dict

如果有人对fix_dict这个变体感兴趣,请告诉我。 我也准备改名。 (也许fix_dict_methods_with_import ?)

@rdrey ,我对这个变体感兴趣。 在正常fix_dict之前运行它听起来是个好主意,特别是如果代码库总是在只需要迭代器时调用iter版本。

你介意分享吗?

@rkouye给你: https : //gist.github.com/rdrey/a307f46f7708b65421061374a14d60e9

此页面是否有帮助?
0 / 5 - 0 等级