9 votes

Python Noms des fonctions générateurs -- un préfixe est-il utile?

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?

7voto

unutbu Points 222216

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

pour nœud dans doc.iter():

semble familier, donc en suivant ce schéma, je considérerais nommer un générateur de certains types sometypes_iter afin que je puisse écrire de manière analogue,

pour élément dans sometypes_iter():

Python fournit une fonction sorted. En suivant ce schéma, je pourrais mettre les verbes au passé :

sometypes_reduced
sometypes_mapped
sometypes_filtered

Si vous avez suffisamment de ces fonctions, il pourrait être logique de créer une classe SomeTypes afin que les noms des méthodes puissent être raccourcis en reduce, map et filter.

Si les fonctions peuvent être généralisées pour accepter ou renvoyer des types autres que sometype, alors bien sûr il serait logique de supprimer sometype du nom de la fonction, et plutôt de choisir un nom qui met en avant ce qu'elle fait plutôt que les types.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X