Mary Rose Cook'un Fonksiyonel Programlamaya Pratik Girişini okurken, bir anti-desen örneği veriyor
def format_bands(bands):
for band in bands:
band['country'] = 'Canada'
band['name'] = band['name'].replace('.', '')
band['name'] = band['name'].title()
dan beri
- işlev birden fazla şey yapar
- isim açıklayıcı değil
- yan etkileri var
Önerilen bir çözüm olarak, anonim işlevlerin ardışık düzenini önermektedir
pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name')])
Ancak bu bana daha az test edilebilir olmanın dezavantajına sahip gibi geliyor; en azından format_bands, bunun ne anlama geldiğini kontrol etmek için bir birim testine sahip olabilir, ancak boru hattını nasıl test edebilirim? Yoksa anonim işlevlerin test edilmesine gerek kalmayacak kadar açıklayıcı olduğu fikri mi?
Bunun için gerçek dünyadaki uygulama pandas
kodumu daha işlevsel hale getirmeye çalışıyor . Sık sık bir "munging" fonksiyonu içinde bir tür boru hattım olacak
def munge_data(df)
df['name'] = df['name'].str.lower()
df = df.drop_duplicates()
return df
Veya ardışık düzen tarzında yeniden yazma:
def munge_data(df)
munged = (df.assign(lambda x: x['name'].str.lower()
.drop_duplicates())
return munged
Böyle bir durumda en iyi uygulamalar için herhangi bir öneriniz var mı?