如何使此代码更干燥

时间:2012-07-23 18:21:49

标签: python

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()]))

3 个答案:

答案 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的一些原则)