我发现自己经常写这样的东西,而且看起来太罗嗦了:
obj = my_dict.get('obj')
if obj:
var = obj
有一个更好的方法吗?也许在一行中?
最佳答案
obj = my_dict.get('obj')
if obj: # <--- test is 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'].__nonzero__() returned True (__bool__ for python 3)
# OR
# my_dict['obj'].__len__() returned something > 0
# OR
# my_dict['obj'] is not None, and is an instance which defines neither of __nonzero__ or __len__
var = obj
当前此处的所有其他 5 个答案(包括已接受的答案)都在跳枪,并且在您要查找的值是
False
在 bool 上下文中评估的情况下,其行为将与您所要求的有所不同。假设您的
var
已经被定义,这个单行代码是可能的:var = my_dict['obj'] if 'obj' in my_dict and my_dict['obj'] else var
但请注意,它与您的情况略有不同:如果
NameError
以前未定义,则会引发 var
,而您的情况只是继续使用不在范围内的 var
。也许您应该澄清您的预期行为以消除一些困惑!
关于用于有条件地分配变量的 Python 简写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8719986/