Python 条件赋值变量的简写方法
我发现自己经常写这样的代码,感觉有点啰嗦:
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