lib2to3.fixes.fix_dict
、基本的に任意の呼び出しラップしませんdict.keys()
、 .values()
または.items()
でlist()
一切そのコンテキストを問題では。
しかし、私が知る限り、結果が直接繰り返されるか(たとえば、 for k, v in d.items()
)、包含がチェックされる(たとえば、 if a in d.keys()
)と、多くの差分が生じる場合、呼び出しは多かれ少なかれ無意味です。戻すノイズ。
python-futureに、この煩わしさを回避する独自のdict-iterationフィクサーがあればいいでしょう。
ディクショナリのエントリを追加または削除しているときにビューを反復すると、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
最も参考になるコメント
for
ループの内部でエントリを追加または削除している場合は、list()
が必要です