Python-future: Remplacez lib2to3.fixes.fix_dict pour éviter inutilement les appels list()

Créé le 8 sept. 2017  ·  4Commentaires  ·  Source: PythonCharmers/python-future

lib2to3.fixes.fix_dict encapsulera essentiellement tout appel à dict.keys() , .values() ou .items() dans list() quel que soit son contexte.

Cependant, pour autant que je sache, les appels sont plus ou moins inutiles lorsque le résultat est soit directement itéré (par exemple for k, v in d.items() ) soit vérifié pour le confinement (par exemple if a in d.keys() ) conduisant à beaucoup de diff- bruit pour revenir.

Ce serait bien si python-future avait son propre fixateur d'itérations dict évitant ce désagrément.

0.21 enhancement

Commentaire le plus utile

L'itération des vues lors de l'ajout ou de la suppression d'entrées dans le dictionnaire peut générer une RuntimeError ou échouer à itérer sur toutes les entrées.

Si l'intérieur de la boucle for ajoute ou supprime des entrées, alors le list() est nécessaire

Tous les 4 commentaires

L'itération des vues lors de l'ajout ou de la suppression d'entrées dans le dictionnaire peut générer une RuntimeError ou échouer à itérer sur toutes les entrées.

Si l'intérieur de la boucle for ajoute ou supprime des entrées, alors le list() est nécessaire

J'ai écrit mon propre " fix_dict_methods " qui fait ceci :

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

Cela devrait être plus sûr pour le code PY2 qui est progressivement futurisé étape par étape.

Il n'enveloppe aucun des appels simples de .keys/values/items() dans list() non plus, car je n'ai pas encore trouvé beaucoup d'endroits où nous avons besoin de ce correctif, mais je pourrais le suivre dans une étape distincte - Je pense que je peux exécuter le fix_dict normal si j'ai besoin de ce changement.

Faites-moi savoir s'il y a un intérêt pour cette variante de fix_dict . Je suis également partant pour changer son nom. (Peut-être fix_dict_methods_with_import ?)

Salut @rdrey , je suis intéressé par cette variante. Cela semble être une bonne idée de l'exécuter avant le fix_dict normal, surtout si la base de code appelle toujours la version iter lorsqu'elle n'a besoin que d'un itérateur.

Cela vous dérange-t-il de le partager?

Cette page vous a été utile?
0 / 5 - 0 notes