我目前正在学习 Python(之前使用过像 JavaScript 和 Ruby 这样的其他语言)。我非常习惯链式调用一些转换/过滤操作,但我相信在 Python 中这不是正确的方式:filter
在可枚举对象之前需要一个 lambda 函数,因此编写长/多行函数看起来非常奇怪,并且将它们链接在一起意味着将它们以相反的顺序放置,这不易于阅读。
在 Python 中,如何编写此 JavaScript 函数中的映射和过滤的“Python方式”?
let is_in_stock = function() /* ... */
let as_item = function() /* ... */
let low_weight_items = shop.inventory
.map(as_item)
.filter(is_in_stock)
.filter(item => item.weight < 1000)
.map(item => {
if (item.type == "cake") {
let catalog_item = retrieve_catalog_item(item.id);
return {
id: item.id,
weight: item.weight,
barcode: catalog_item.barcode
};
} else {
return default_transformer(item);
}
});
我理解可以在第一个map和接下来的两个filter中使用列表推导式,但是不确定如何完成最后一个map以及如何将所有内容组合在一起。
谢谢!