मैरी रोज कुक की व्यावहारिक क्रियाशीलता का व्यावहारिक परिचय पढ़ना , वह एक विरोधी पैटर्न का एक उदाहरण देता है
def format_bands(bands):
for band in bands:
band['country'] = 'Canada'
band['name'] = band['name'].replace('.', '')
band['name'] = band['name'].title()
जबसे
- फ़ंक्शन एक से अधिक कार्य करता है
- नाम वर्णनात्मक नहीं है
- इसके दुष्प्रभाव हैं
एक प्रस्तावित समाधान के रूप में, वह अनाम कार्यों को पाइपलाइन करने का सुझाव देती है
pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name')])
हालांकि यह मुझे कम परीक्षण योग्य होने का नकारात्मक पक्ष लगता है; कम से कम format_bands में यह जांचने के लिए एक इकाई परीक्षण हो सकता है कि यह क्या करता है, लेकिन पाइपलाइन का परीक्षण कैसे किया जाता है? या यह विचार है कि अनाम कार्य इतने आत्म-व्याख्यात्मक हैं कि उन्हें परीक्षण करने की आवश्यकता नहीं है?
इसके लिए मेरा वास्तविक विश्व अनुप्रयोग मेरे pandas
कोड को अधिक कार्यात्मक बनाने की कोशिश में है। मैं अक्सर "मुंगिंग" फंक्शन के अंदर किसी न किसी तरह की पाइपलाइन लगाता हूँ
def munge_data(df)
df['name'] = df['name'].str.lower()
df = df.drop_duplicates()
return df
या पाइपलाइन शैली में पुनर्लेखन:
def munge_data(df)
munged = (df.assign(lambda x: x['name'].str.lower()
.drop_duplicates())
return munged
इस तरह की स्थिति में सर्वोत्तम प्रथाओं के लिए कोई सुझाव?