Question

La plupart des fonctions sont faciles à nommer. En général, un nom de fonction est basée sur ce qu'il fait ou le type de résultat qu'elle produit.

Dans le cas d'une fonction de générateur, cependant, le résultat pourrait être un itérables sur un autre type.

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

Le nom de sometype se sent trompeur, car la fonction ne retourne pas un objet du type nommé. Il est vraiment un itérables sur sometype.

Un nom comme iter_sometype ou gen_sometype se sent un peu trop comme Notation hongroise . Cependant, il semble également de préciser l'intention de la fonction.

Pour aller plus loin, il y a un certain nombre de cas plus spécialisés, où un préfixe pourrait être utile. Ce sont des exemples typiques, dont certains sont disponibles dans itertools . Cependant, nous avons souvent d'écrire une version qui a obtenu une certaine complexité algorithmique qui rend semblable à itertools, mais pas un ajustement parfait.

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

Est-ce que le iter_, map_, reduce_, préfixe filter_ aident à clarifier le nom d'une fonction de générateur? Ou est-ce juste l'encombrement visuel?

Si un préfixe est utile, quelles suggestions prefix avez-vous?

Par ailleurs, si un suffixe est utile, quelles suggestions suffixe avez-vous?

Était-ce utile?

La solution

dicts Python ont des méthodes iter*. Et les arbres lxml ont aussi une méthode de iter. Lecture

for node in doc.iter():

semble familier, si suivant ce modèle, je considère nommer le générateur de sometypes sometypes_iter pour que je puisse écrire analgously,

for item in sometypes_iter():

Python fournit une fonction sorted. À la suite de ce modèle, je pourrais faire passé le verbe-fonctions:

sometypes_reduced
sometypes_mapped
sometypes_filtered

Si vous avez assez de ces fonctions, il peut être judicieux de faire une classe SomeTypes de sorte que les noms de méthode pourraient être raccourcies à reduce, map et filter.

Si les fonctions peuvent être généralisés à accepter ou retourner un autre type que sometype, puis bien sûr, il serait logique de supprimer sometype du nom de la fonction, et choisissez plutôt un nom qui met l'accent sur ce qu'il fait plutôt que les types.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top