【问题标题】:What does if-if-else one-line do in Python? [duplicate]if-if-else 单行在 Python 中的作用是什么? [复制]
【发布时间】:2017-04-27 12:59:09
【问题描述】:

我在这里的一个关于knapsack problems的问题中遇到了这个表达式:

def f(v, i, S):
  if i >= len(v): return 1 if S == 0 else 0
  count = f(v, i + 1, S)
  count += f(v, i + 1, S - v[i])
  return count

当我尝试以更一般的形式写出第二行 if i >= len(v): return 1 if S == 0 else 0 时,出现错误:

In [3]: if test1 : print x if test2 else print y 
  File "<ipython-input-3-9d4131fa0c48>", line 1
    if test1 : print x if test2 else print y
                     ^
SyntaxError: Missing parentheses in call to 'print'

这是一个通用的形式:

In [16]: if True : print("first") if True else print("second") 
first

In [17]: if True : print("first") if False else print("second")
second

In [18]: if False : print("first") if True else print("second")
[nothing]

In [19]: if False : print("first") if False else print("second")
[nothing]

你怎么称呼它?

我很惊讶你可以取出 if...then...else 的第二个阳性案例并将其转换为 if...else


更新:抱歉,python3 noob 的错误,我只是没有注意。如前所述,如果没有错误,答案就没有意义,所以我删除了错误的代码。

【问题讨论】:

  • 称为条件表达式或三元表达式,见stackoverflow.com/questions/394809/…docs.python.org/2/reference/…
  • 注意你的直接问题是print() 是 Python 3 中的一个函数,调用它需要括号。
  • 在使用 Python 3 运行脚本时,您需要修复括号以进行打印。
  • 我将问题回滚到您的原始帖子,因为您的编辑使接受和赞成的答案(您在打印声明中缺少())毫无意义。
  • @SiHa,是的。我已经进行了必要的连续性校正。正确答案是示例。我知道条件表达式是什么。我想要的是单行的名称,如:“那么除了 if-if-else 之外,我还怎么称呼它?”哈哈。

标签: python if-statement


【解决方案1】:

我觉得有必要指出您所描述的 (if-if-else) 本身不是条件表达式,但它确实包括一个:

1 if S == 0 else 0条件表达式

if i &gt;= len(v): return 1 if S == 0 else 0 是一个compound statement,它包含一个带有条件表达式的简单if 语句。

因此,如果第一个 if 的计算结果为 True,则条件表达式将被计算并将适当的元素(在本例中为 10)返回到前面的语句(return,在这里)。

【讨论】:

  • 我想你抓住了我想要的东西。就我而言,这不是重复,而是(就我而言)一种误解,即更好地理解为复合(条件)语句。
【解决方案2】:

您已找到ternary operator,在 Python 中称为Conditional Expression。表达式x if condition else y 表示如果条件(可以是复杂语句或函数)计算结果为 True,则表达式返回 x,如果条件计算结果为 False,则表达式返回 y

它的工作方式类似于以下 if 语句:

if test1:
    if test2:
        print(x)
    else:
        print(y)

您的错误源于未将 print function 参数括在括号中。这是对 Python 3 的更改,而在 Python 2 中,您的语法会很好。重写它看起来像:

if test1: print(x if test2 else y)

你的错误就会消失。

【讨论】:

    【解决方案3】:

    如果你使用的是版本>3的python,那么print应该有括号,即()

    【讨论】:

      【解决方案4】:

      它是一个if表达式:a if condition else b表示:如果条件为真,则表达式有值a,否则b

      您的问题无关紧要,看来您使用的是python 3,您从python 2中获得了示例。在python 3中, print 是一个函数,因此只需添加括号

      【讨论】:

        猜你喜欢
        • 2018-09-19
        • 2018-03-14
        • 2019-03-18
        • 1970-01-01
        • 2014-06-16
        • 1970-01-01
        • 1970-01-01
        • 2013-06-26
        • 1970-01-01
        相关资源
        最近更新 更多