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フィクサーがあればいいでしょう。

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 、私はこの変種に興味があります。 特に、イテレータのみが必要なときにコードベースが常にiterバージョンを呼び出す場合は、通常のfix_dict前に実行することをお勧めします。

共有してもよろしいですか?

@rkouyeここに行きます: https//gist.github.com/rdrey/a307f46f7708b65421061374a14d60e9

このページは役に立ちましたか?
0 / 5 - 0 評価