Python 条件赋值变量的简写方法

3 投票
5 回答
4521 浏览
提问于 2025-04-17 09:29

我发现自己经常写这样的代码,感觉有点啰嗦:

obj = my_dict.get('obj')
if obj:
    var = obj

有没有更好的方法来做到这一点?也许可以用一行代码实现?

5 个回答

2

我觉得这个写法是最容易理解的,我一直在用它:

moo = animals["cow"] if "cow" in animals else None
11

get 函数有一个第二个参数,叫做默认值:

get(key[, default])
如果字典中有这个键(key),就返回对应的值;如果没有,就返回默认值。如果没有提供默认值,默认会是 None,这样这个方法就不会引发 KeyError 错误。

http://docs.python.org/library/stdtypes.html

所以,你可以用下面的代码来实现你问题中的代码:

var = my_dict.get('obj', var)
5

没有简单的方法可以用一行代码来替换这段代码,因为它是根据条件来绑定名字 var 的。如果 var 已经被定义了,那么可以用一行代码来实现:

var = my_dict['obj'] if 'obj' in my_dict and my_dict['obj'] else var

不过,如果 var 还没有被定义,这一行代码的表现就和原来的代码有点不同了:这一行代码会引发一个 NameError 错误,而原来的代码则会继续执行,保持 var 处于未绑定状态。

需要注意的是,其他的回答在值存在但为假值的情况下表现也会有所不同。

obj = my_dict.get('obj')
if obj:   # <-- test on truthiness of obj
    # if we are here, it means:
    #   1. my_dict has key 'obj', AND...
    #   2. at least one of the following,
    #        my_dict['obj'].__bool__() returned True (__nonzero__ for Python 2)
    #      OR
    #        my_dict['obj'].__len__() returned result > 0
    #      OR
    #        my_dict['obj'] is not None, and has neither __bool__ nor __len__ defined
    var = obj

撰写回答