只有当它不是None时才能分配值的优雅方式

时间:2015-01-20 09:04:18

标签: python

这是我目前的实施:

def update_obj(obj_id, field1=None, field2=None):
    obj = ... # some code to get object by obj_id
    if field1 is not None:
        obj.field1 = field1   
    if field2 is not None:
        obj.field2 = field2

update_obj(1, field1='new value')
update_obj(2, field2='new value')
update_obj(3, field1='new value', field2='another new value')   

我尝试在一行中进行评估,例如:

obj.field1 = field1 if field1 is not None else ob.field1

但是,obj.field1 = obj.field1非常冗余,obj.field1 = field1 if field1 is not None不是有效语句。 有什么建议让它更简单,更清洁?我正在使用python 2.7。

2 个答案:

答案 0 :(得分:1)

如果它的代码重复困扰你,你可以使用反射,例如:

obj.__dict__.update(n,v for n,v in locals() if n in 'field1','field2' and v is not None)

答案 1 :(得分:0)

我使用or

obj.field1 = field1 or or obj.field1

它不会删除冗余,但它更简洁一点。