我发现自己经常写这样的东西,而且看起来太罗嗦了:

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/

10-12 22:57
查看更多