การอ่านบทนำเชิงปฏิบัติของแมรี่โรสคุกเกี่ยวกับการเขียนโปรแกรมเชิงฟังก์ชั่นเธอเป็นตัวอย่างของรูปแบบการต่อต้าน
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
โค้ดของฉันทำงานได้มากกว่า ฉันมักจะมีขั้นตอนในการ "munging"
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
ข้อเสนอแนะสำหรับแนวทางปฏิบัติที่ดีที่สุดในสถานการณ์เช่นนี้?