如何结合for循环使用Python map函数改造累加统计逻辑
使用map改写统计总计数的实现方法
直接用map提取每个预订对象的乘客数属性,配合内置sum函数就能完成累加,不需要手动初始化计数器、写循环遍历:
def get_bought_passenger_count(self): return sum(map(lambda x: x.passenger_count, self.bookings.all()))
逻辑说明
map(lambda x: x.passenger_count, self.bookings.all())会遍历self.bookings.all()返回的所有预订记录,把每个记录的passenger_count值提取出来,生成一个整数序列- 外层的
sum()会直接对这个整数序列求和,和你原来的循环累加逻辑完全等价
额外提示:如果这是Django模型的方法,用数据库聚合的写法性能会更高:
return self.bookings.aggregate(total=Sum('passenger_count'))['total'] or 0,这种写法不会把所有预订记录加载到Python内存,计算直接在数据库层完成,但如果你的需求是必须使用map函数,用前面的写法就可以。
内容的提问来源于stack exchange,提问作者enes islam
相关产品推荐
相关产品推荐

