La plupart des fonctions sont faciles à nommer. Généralement, un nom de fonction est basé sur ce qu'il fait ou sur le type de résultat qu'il produit.Noms des fonctions du générateur Python - un préfixe est-il utile?
Dans le cas d'une fonction de générateur, cependant, le résultat pourrait être itérable sur un autre type.
def sometype(iterable):
for x in iterable:
yield some_transformation(x)
Le nom sometype
se sent trompeur, car la fonction ne retourne pas un objet du type nommé. C'est vraiment un itératif sur sometype
. Un nom comme iter_sometype
ou gen_sometype
ressemble un peu trop à Hungarian Notation. Cependant, il semble également clarifier l'intention de la fonction.
En outre, il existe un certain nombre de cas plus spécialisés, où un préfixe peut être utile. Voici des exemples typiques, dont certains sont disponibles dans itertools. Cependant, nous avons souvent besoin d'écrire une version qui a une certaine complexité algorithmique qui fait similaire à 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_
aider à clarifier le nom d'une fonction de générateur? Ou est-ce juste un fouillis 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?
Je pense que vous êtes plutôt généralisé ... je veux dire, la plupart écriraient simplement vos 2e et 3e fonctions directement comme expressions génératrices ala '(some_mapping (x) pour x dans iterable)'. Le premier ne "réduit" vraiment rien, c'est plus comme un mapping car il y a un nouveau "sometype" pour chaque "x". –
@ THC4k: S'il vous plaît imaginez qu'ils sont plus complexes.Trop complexe pour s'intégrer facilement dans 'itertools'. Pas si complexe qu'ils violent les principes de base de la programmation fonctionnelle. Par exemple, ils pourraient impliquer beaucoup de travail d'installation préliminaire comme une optimisation. –