Python中有一个`?.`运算符?

时间:2013-10-24 01:57:29

标签: python null operator-keyword ternary

Groovy有一个非常方便的运算符?.。这将检查对象是否不是null,如果不是,则访问方法或属性。我可以在Python中做同样的事情吗?

我找到的最近的是ternary conditional operator。现在我正在做

l = u.find('loc')
l = l.string if l else None

然而写

会很好
l = u.find('loc')?.string

更新:除了下面提到的getattr之外,我发现了一个相对不错的方法来处理列表:

[x.string if x else None for x in [u.find('loc'), u.find('priority'), ...]]

另一种选择,如果您要排除None

[x.string for x in [u.find('loc'), u.find('priority'), ...] if x]

1 个答案:

答案 0 :(得分:4)

你可以写这样的东西

L = L and L.string

重要的是要注意,就像在你的三元例子中一样,这将为L的任何“Falsy”值做“else”部分

如果您需要专门检查无,则更清楚地写

if L is not None:
    L = L.string

或任何“Falsy”版本

if L:
    L = L.string

我认为使用getattr对此也有点尴尬

L = getattr(L, 'string', None)