Python-future: Substitua lib2to3.fixes.fix_dict para evitar chamadas list () desnecessárias

Criado em 8 set. 2017  ·  4Comentários  ·  Fonte: PythonCharmers/python-future

lib2to3.fixes.fix_dict basicamente encerrará qualquer chamada para dict.keys() , .values() ou .items() em list() independentemente do contexto.

No entanto, pelo que posso dizer, as chamadas são mais ou menos inúteis quando o resultado é diretamente iterado (por exemplo, for k, v in d.items() ) ou verificado quanto à contenção (por exemplo, if a in d.keys() ) levando a muitas diferenças ruído para reverter.

Seria bom se o python-future tivesse seu próprio fixador de iteração de ditado evitando esse aborrecimento.

0.21 enhancement

Comentários muito úteis

A iteração de visualizações ao adicionar ou excluir entradas no dicionário pode gerar um RuntimeError ou falhar ao iterar em todas as entradas.

Se o interior do loop for está adicionando ou excluindo entradas, então o list() é necessário

Todos 4 comentários

A iteração de visualizações ao adicionar ou excluir entradas no dicionário pode gerar um RuntimeError ou falhar ao iterar em todas as entradas.

Se o interior do loop for está adicionando ou excluindo entradas, então o list() é necessário

Eu escrevi meu próprio " fix_dict_methods " que faz isto:

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

Deve ser mais seguro para o código PY2 que está lentamente sendo futurizado, passo a passo.

Ele não quebra qualquer um dos simples .keys/values/items() chamadas em list() qualquer um, desde que eu não tenho encontrado muitos pontos que precisamos que fix ainda, mas eu poderia seguir com isso como uma etapa separada - Acho que posso executar o fix_dict normal se precisar dessa mudança.

Informe se houver interesse nesta variante de fix_dict . Também estou disposto a mudar seu nome. (Talvez fix_dict_methods_with_import ?)

Olá @rdrey , estou interessado nesta variante. Parece uma boa ideia executá-lo antes do fix_dict normal, especialmente se a base de código sempre chama a versão iter quando só precisa do iterador.

Você se importa em compartilhar?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ambv picture ambv  ·  13Comentários

wimglenn picture wimglenn  ·  5Comentários

foreignmeloman picture foreignmeloman  ·  3Comentários

treyhunner picture treyhunner  ·  5Comentários

asottile picture asottile  ·  18Comentários