Pergunta

A maioria das funções é fácil de nomear. Geralmente, um nome de função é baseado no que faz ou no tipo de resultado que produz.

No caso de uma função de gerador, no entanto, o resultado pode ser um iterável em relação a algum outro tipo.

def sometype( iterable ):
    for x in iterable:
        yield some_transformation( x )

o sometype O nome parece enganoso, pois a função não retorna um objeto do tipo nomeado. É realmente um iterável sobre sometype.

Um nome como iter_sometype ou gen_sometype parece um pouco demais Notação húngara. No entanto, também parece esclarecer a intenção da função.

Indo adiante, existem vários casos mais especializados, onde um prefixo pode ser útil. Estes são exemplos típicos, alguns dos quais estão disponíveis em ITERTOOLS. No entanto, geralmente temos que escrever uma versão que tem alguma complexidade algorítmica que o torna semelhante a itertools, mas não é um ajuste perfeito.

def reduce_sometype( iterable ):
    summary = sometype()
    for x in iterable:
         if some_rule(x): 
             yield summary
             summary= sometype()
         summary.update( x )

 def map_sometype( iterable ):
     for x in iterable:
         yield some_complex_mapping( x )

 def filter_sometype( iterable ):
     for x in iterable:
         if some_complex_rule(x):
              yield x

Faz o iter_, map_, reduce_, filter_ O prefixo ajuda a esclarecer o nome de uma função de gerador? Ou é apenas uma desordem visual?

Se um prefixo é útil, que sugestões de prefixo você tem?

Como alternativa, se um sufixo é útil, que sugestões de sufixo você tem?

Foi útil?

Solução

Pitão dicts tenho iter* métodos. E as árvores lxml também têm um iter método. Leitura

for node in doc.iter():

Parece familiar, então, seguindo esse padrão, eu consideraria nomear o gerador de algum dia sometypes_iterpara que eu pudesse escrever de forma angustiante,

for item in sometypes_iter():

Python fornece a sorted função. Seguindo esse padrão, posso fazer as funções verbais passadas:

sometypes_reduced
sometypes_mapped
sometypes_filtered

Se você tem o suficiente dessas funções, pode fazer sentido fazer um SomeTypes classe para que os nomes dos métodos possam ser reduzidos para reduce, map, e filter.

Se as funções puderem ser generalizadas para aceitar ou devolver tipos que não sejam sometype, então é claro que faria sentido remover sometype a partir do nome da função e, em vez disso, escolha um nome que enfatize o que ele faz e não nos tipos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top