从web2py example 33我们看到:
db.purchase.insert(buyer_id=form.vars.buyer_id,
product_id=form.vars.product_id,
quantity=form.vars.quantity)
但我认为应该有一些方法可以减少重复性。也许这个?
db.purchase.insert(**dict( [k = getattr(form.vars, k) for k in "buyer_id product_id quantity".split()]))
答案 0 :(得分:6)
对我来说,DRY意味着1)不重复实际代码,2)(更重要的是)不重复信息;即每个信息项都应该有一个地方。
在这种情况下,你真的只是重复一个模式,我认为这很好。第二个例子难以阅读;为什么复杂只是为了节省几个字符?
答案 1 :(得分:2)
您可以避免重复form.vars
:
vars = form.vars
db.purchase.insert(
buyer_id=vars.buyer_id,
product_id=vars.product_id,
quantity=vars.quantity)
仍有一些重复,但我认为最好不要重复,而不是让你的代码难以阅读。
答案 2 :(得分:0)
如果这三件事情都可以做到
db.purchase.insert(** form.vars)
否则我认为原始代码很干燥
但我想你可以做到
to_insert = {"product_id":form.vars.product_id,"quantity":form.vars.quantity,"buyer_id":form.vars.buyer_id}
db.purchase.insert(**to_insert)
这与你的第二个例子类似,但更具可读性和简单性(python的一些原则)