返回对象 - python内联if

时间:2017-01-31 07:04:17

标签: python if-statement

我要写一行相当于:

if userSet in Cluster.salientGroupCache:
            return Cluster.salientGroupCache[userSet]

所以,我试过了:

return Cluster.salientGroupCache[userSet] if userSet in Cluster.salientGroupCache else None

但是这一行返回Cluster.salientGroupCache[userSet]None表示评估表达式。

以下给我一个错误:

None if not userSet in Cluster.salientGroupCache else return Cluster.salientGroupCache[userSet]

有没有办法选择性地使用内联返回一个值if if,如果不是,我会很感激地解释为什么。

3 个答案:

答案 0 :(得分:4)

如果您愿意,可以在一行写下您的第一个代码:

if userSet in Cluster.salientGroupCache: return Cluster.salientGroupCache[userSet]

这不是很好的风格,但它完全符合您的要求。您不能使用if表达式,因为return是一个语句,您无法在表达式中嵌套语句。

答案 1 :(得分:0)

  

如果不在其中,则不会发生任何事情。

然后,当您使用return关键字时,您所做的工作将无法正常工作。所以请保持原来的状态,以便在userSet不在群组中时代码可以继续流动

  

我更喜欢使用内联ifs,因为代码更短。

这是开始学习编码的一种非常危险的方式。

是的,你有时可能会对其他人看起来更聪明,但第二次他们开始意识到你的"单线"实际上是让性能变慢,它们只是将代码恢复为更简单的形式。

答案 2 :(得分:0)

你想要1行代码吗?为什么?

如果它涉及风格和性能,那么首先只在Cluster.salientGroupCache中进行一次查找:

try:
    return Cluster.salientGroupCache[userSet]
except KeyError:  # or another error (it's a dict, right?)
    pass

它可能更快,更pythonic,因为它遵循EAFP principle: "Easier to ask for forgiveness than permission."

关于您的例外:

None if not userSet in Cluster.salientGroupCache else return Cluster.salientGroupCache[userSet]
#              that's not allowed in an expression----^^^^^^

但是:

return Cluster.salientGroupCache[userSet] if userSet in Cluster.salientGroupCache else None

应该没有问题。