我有以下函数来计算给定年份每个月制作的小部件总数:
def get_monthly_totals(year):
queryset = Widget.objects.filter(manufactured__year=year)
totals = [0] * 12
for widget in queryset:
totals[widget.manufactured.month -1] += 1
return totals
首先,它获取给定年份的所有窗口小部件对象,然后计算每个月的总计。
现在,widget对象还有一个sold属性(也是一个datetime类型)。我想将一个参数传递给上面的函数,告诉它计算出售的每月总数或制造的月度总数。我可以写另一个功能,做同样的事情,并替换生产与销售,但这似乎违反DRY原则。这样做的最pythonic方法是什么?
答案 0 :(得分:0)
一种选择是使用getattr()
:
def get_monthly_totals(year, attr):
queryset = Widget.objects.filter(**{attr + "__year": year})
totals = [0] * 12
for widget in queryset:
totals[getattr(widget, attr).month -1] += 1
return totals
totals_manufactured = gtotalset_monthly_totals(year, "manufactured")
totals_sold = get_monthly_totals(year, "sold")