Python Générateur noms de fonctions - est un préfixe utile? [fermé]
-
26-09-2019 - |
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?
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.