ফাংশনাল প্রোগ্রামিংয়ের জন্য মেরি রোজ কুকের ব্যবহারিক ভূমিকা পড়া এবং তিনি একটি অ্যান্টি-প্যাটার্নের উদাহরণ হিসাবে দিয়েছেন
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')])
তবে এটি আমার কাছে আরও কম পরীক্ষামূলক হওয়ার খারাপ দিকটি বলে মনে হচ্ছে; কমপক্ষে ফরম্যাট_ব্যান্ডগুলির একটি ইউনিট পরীক্ষা থাকতে পারে এটি যা যা বোঝায় তা পরীক্ষা করে তবে পাইপলাইনটি কীভাবে পরীক্ষা করা যায়? বা বেনামে ফাংশনগুলি এতটা স্বতঃস্ফূর্ত যে এগুলি পরীক্ষা করার দরকার নেই এমন ধারণাটি কি?
এটির জন্য আমার বাস্তব-বিশ্ব অ্যাপ্লিকেশনটি আমার 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
এই ধরণের পরিস্থিতিতে সেরা অনুশীলনের জন্য কোনও পরামর্শ?