Python-future: Замените lib2to3.fixes.fix_dict, чтобы избежать ненужных вызовов list ()

Созданный на 8 сент. 2017  ·  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 когда ей нужен только итератор.

Не могли бы вы поделиться им?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги