Python-future: Ersetzen Sie lib2to3.fixes.fix_dict, um unnötige list()-Aufrufe zu vermeiden

Erstellt am 8. Sept. 2017  ·  4Kommentare  ·  Quelle: PythonCharmers/python-future

lib2to3.fixes.fix_dict umschließt grundsätzlich jeden Anruf an dict.keys() , .values() oder .items() in list() unabhängig vom Kontext.

Soweit ich das beurteilen kann, sind die Aufrufe jedoch mehr oder weniger sinnlos, wenn das Ergebnis entweder direkt iteriert (zB for k, v in d.items() ) oder auf Eindämmung überprüft wird (zB if a in d.keys() ), was zu vielen Unterschieden führt. Rauschen umzukehren.

Wäre schön, wenn Python-Future einen eigenen Diktat-Iterations-Fixer hätte, der diesen Ärger vermeidet.

0.21 enhancement

Hilfreichster Kommentar

Das Iterieren von Ansichten beim Hinzufügen oder Löschen von Einträgen im Wörterbuch kann einen RuntimeError auslösen oder die Iteration über alle Einträge fehlschlagen.

Wenn das Innere der for Schleife Einträge hinzufügt oder löscht, dann wird list() benötigt

Alle 4 Kommentare

Das Iterieren von Ansichten beim Hinzufügen oder Löschen von Einträgen im Wörterbuch kann einen RuntimeError auslösen oder die Iteration über alle Einträge fehlschlagen.

Wenn das Innere der for Schleife Einträge hinzufügt oder löscht, dann wird list() benötigt

Ich habe mein eigenes " fix_dict_methods " geschrieben, das dies tut:

"""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)
"""

Es sollte sicherer für PY2-Code sein, der langsam Schritt für Schritt futurisiert wird.

Es schließt auch keinen der einfachen .keys/values/items() Aufrufe in list() , da ich noch nicht viele Stellen gefunden habe, an denen wir diese Korrektur benötigen, aber ich könnte es als separaten Schritt weiterverfolgen - Ich denke, ich kann die normalen fix_dict ausführen, wenn ich diese Änderung brauche.

Lassen Sie es mich wissen, wenn Interesse an dieser Variante von fix_dict . Ich bin auch bereit, seinen Namen zu ändern. (Vielleicht fix_dict_methods_with_import ?)

Hallo @rdrey , ich interessiere mich für diese Variante. Klingt nach einer guten Idee, es vor dem normalen fix_dict auszuführen, insbesondere wenn die Codebasis immer die Version iter aufruft, wenn sie nur einen Iterator benötigt.

Macht es Ihnen etwas aus, es zu teilen?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen