0

web2py の例 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()]))
4

3 に答える 3

6

私にとって、DRY とは、1) 実際のコードを繰り返さないこと、および 2) (さらに重要なことに) 情報を繰り返さないことを意味します。つまり、各情報項目が存在する場所が 1 つあります。

この例では、パターンを繰り返しているだけで、それで問題ないと思います。2 番目の例は非常に読みにくいです。数文字を節約するためだけに複雑にするのはなぜですか?

于 2012-07-23T18:26:19.623 に答える
2

繰り返しを避けることができますform.vars

vars = form.vars
db.purchase.insert(
    buyer_id=vars.buyer_id,  
    product_id=vars.product_id, 
    quantity=vars.quantity)

まだ繰り返しがありますが、コードを読みにくくするよりも、繰り返しを残した方がよいと思います。

于 2012-07-23T18:25:48.557 に答える
0

この3つさえあれば、あなたにできることはある

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) 

これは2番目の例に似ていますが、より読みやすくシンプルです(Pythonのいくつかの原則)

于 2012-07-23T18:30:29.953 に答える