Python:访问NoneType对象时变量赋值的更简洁语法

时间:2011-09-14 19:13:00

标签: python

说,我有以下Python代码

if obj is None:
  identifier = None
else:
  identifier = obj.id

其中obj是一个不包含类定义的Python对象

我几乎不记得有一种更简洁的语法(比如一行代码?)可以达到同样的效果。如果我没有做梦,有人可以建议更简单的语法吗?感谢。

3 个答案:

答案 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]

如果objNone,则

((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]