说,我有以下Python代码
if obj is None:
identifier = None
else:
identifier = obj.id
其中obj
是一个不包含类定义的Python对象
我几乎不记得有一种更简洁的语法(比如一行代码?)可以达到同样的效果。如果我没有做梦,有人可以建议更简单的语法吗?感谢。
答案 0 :(得分:8)
identifier = None if obj is None else obj.id
答案 1 :(得分:2)
identifier = getattr(obj, "id", None)
答案 2 :(得分:1)
如果使用没有条件表达式的旧python版本,则可以使用布尔表达式的评估语义:布尔表达式的值是表达式中该术语的值,用于确定其最终值。这听起来很抽象,但在你的情况下,你可以说:
((obj is None and [None]) or [obj.id])[0]
如果obj
为None
,则
((True and [None]) or [obj.id])[0]
是
([None] or [obj.id])[0]
由于[None]
代表True
值,可以使用任何表达式or
而不更改or
表达式的值,结果为[None][0]
这是None
如果obj
不是None
,那么
((False and [None]) or [obj.id])[0]
是
(False or [obj.id])[0]
= ([obj.id])[0]
= obj.id
这就是你以前如何模拟三元运算符,即“条件表达式”,如果以前的话。
一般模式a if b else c
与
(b and [a] or [c])[0]