【问题标题】:Inline conditional between more than 2 values超过 2 个值之间的内联条件
【发布时间】:2014-12-15 21:01:03
【问题描述】:

我需要这样做:

if A
 function(a)
elif B
 function(b)
else
 function(c)

我在这里找到了更简单的版本:

function(a if A else c)

elif 有版本吗?比如:

function(a if A b elif B else c)

我应该如何写这个(如果存在的话)?上面的代码看起来不对。

【问题讨论】:

  • 你确定你需要那个吗?这太抽象了,说不出来,但我可以看到一些非常难以辨认的单行线从这里出来。也许是一本字典?
  • 什么是 A 和 B ?值或表达式?你能分享真实的代码吗?你需要用不同的参数调用相同的函数还是用相同的参数调用不同的函数?
  • 表达式。我正在调用函数(实际上是方法)。在 matsjoyce 的帮助下,我的代码如下所示: pytanie.add_pytanie_rodzaj('Białe' if licznik_wewnetrzny
  • 关于问题标题,我看到python版本并不重要,但我会用“if”或“elif”短语而不是“inline conditional”搜索答案。

标签: python if-statement


【解决方案1】:

不,不elifs。只需链接ifs:

function(a if A else b if B else c)

相当于(因为precedence从左到右):

function(a if A else (b if B else c))

显然这可能会变得复杂(并且超过 PEP8 80 字符的限制),例如:

move(N if direction == "N" else E if direction == "E" else S if direction == "S" else W)

在这种情况下,较长的形式更好:

if direction == "N":
    move(N)
elif direction == "E":
    move(E)
elif direction == "S":
    move(S)
else:
    move(W)

【讨论】:

  • 哦...所以 elif 又回到了 else if。现在看,我不明白为什么我没有弄清楚,它是如此的美好和简单。因为这个,我喜欢python。非常感谢!
  • 是的。我认为添加 elif 会使表达式更丑陋,而不是更好,所以他们把它省略了。
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2011-08-31
相关资源
最近更新 更多