La plupart des fonctions sont faciles à nommer. Généralement, le nom d'une fonction est basé sur ce qu'elle fait ou le type de résultat qu'elle produit.
Dans le cas d'une fonction de génération, cependant, le résultat pourrait être un itérable sur un autre type.
def sometype( iterable ):
for x in iterable:
yield some_transformation( x )
Le nom sometype
semble trompeur, car la fonction ne renvoie pas un objet du type nommé. C'est en réalité un itérable sur sometype
.
Un nom comme iter_sometype
ou gen_sometype
ressemble un peu trop à la notation hongroise. Cependant, cela semble aussi clarifier l'intention de la fonction.
Allant plus loin, il existe un certain nombre de cas plus spécialisés où un préfixe pourrait être utile. Ce sont des exemples typiques, certains étant disponibles dans itertools. Cependant, nous devons souvent écrire une version qui présente une complexité algorithmique qui la rend similaire à itertools
, mais qui n'est pas parfaitement adaptée.
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
Le préfixe iter_
, map_
, reduce_
, filter_
aide-t-il à clarifier le nom d'une fonction de génération? Ou n'est-ce que du désordre visuel?
Si un préfixe est utile, quelles suggestions de préfixe avez-vous?
Alternativement, si un suffixe est utile, quelles suggestions de suffixe avez-vous?