我要写一行相当于:
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,如果不是,我会很感激地解释为什么。
答案 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
应该没有问题。