Đọc Giới thiệu thực tế về lập trình chức năng của Mary Rose Cook , cô đưa ra như một ví dụ về chống mẫu
def format_bands(bands):
for band in bands:
band['country'] = 'Canada'
band['name'] = band['name'].replace('.', '')
band['name'] = band['name'].title()
từ
- chức năng làm nhiều hơn một điều
- tên không được mô tả
- nó có tác dụng phụ
Là một giải pháp được đề xuất, cô đề nghị các chức năng ẩn danh
pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name')])
Tuy nhiên, điều này đối với tôi dường như có nhược điểm là thậm chí ít kiểm chứng hơn; ít nhất format_band có thể có một bài kiểm tra đơn vị để kiểm tra xem nó có ý nghĩa gì không, nhưng làm thế nào để kiểm tra đường ống dẫn? Hay là ý tưởng rằng các hàm ẩn danh tự giải thích đến mức chúng không cần phải được kiểm tra?
Ứng dụng trong thế giới thực của tôi cho việc này là cố gắng làm cho pandas
mã của tôi có nhiều chức năng hơn. Tôi thường sẽ có một số loại đường ống bên trong một chức năng "munging"
def munge_data(df)
df['name'] = df['name'].str.lower()
df = df.drop_duplicates()
return df
Hoặc viết lại theo kiểu đường ống:
def munge_data(df)
munged = (df.assign(lambda x: x['name'].str.lower()
.drop_duplicates())
return munged
Bất kỳ đề xuất cho thực hành tốt nhất trong loại tình huống này?