En lisant l' introduction pratique de Mary Rose Cook à la programmation fonctionnelle , elle donne comme exemple un anti-modèle
def format_bands(bands):
for band in bands:
band['country'] = 'Canada'
band['name'] = band['name'].replace('.', '')
band['name'] = band['name'].title()
depuis
- la fonction fait plus d'une chose
- le nom n'est pas descriptif
- il a des effets secondaires
Comme solution proposée, elle suggère de canaliser les fonctions anonymes
pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name')])
Cependant, cela me semble avoir l'inconvénient d'être encore moins testable; au moins format_bands pourrait avoir un test unitaire pour vérifier s'il fait ce qu'il est censé faire, mais comment tester le pipeline? Ou est-ce l'idée que les fonctions anonymes sont si explicites qu'elles n'ont pas besoin d'être testées?
Mon application réelle pour cela est d'essayer de rendre mon pandas
code plus fonctionnel. Je vais souvent avoir une sorte de pipeline à l'intérieur d'une fonction "munging" "
def munge_data(df)
df['name'] = df['name'].str.lower()
df = df.drop_duplicates()
return df
Ou réécriture dans le style pipeline:
def munge_data(df)
munged = (df.assign(lambda x: x['name'].str.lower()
.drop_duplicates())
return munged
Des suggestions de bonnes pratiques dans ce genre de situation?