if-if-else单行在Python中做什么?

时间:2016-12-12 15:55:06

标签: python if-statement

我在这里遇到关于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错误,我只是没有注意。如上所述,答案在没有错误的情况下没有意义,所以我已经删除了错误的代码。

4 个答案:

答案 0 :(得分:4)

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

它的作用类似于以下if语句:

y

您的错误源于未将print function参数包装在括号中。这是对Python 3的更改,而在Python 2中,您的语法会很好。将其重写为:

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

你的错误就会消失。

答案 1 :(得分:1)

我觉得重要的是要指出你描述的内容(if-if-else)本身不是 条件表达式,但确实包括一个:

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

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

因此,如果第一个if求值为True,则将评估条件表达式,并返回相应的元素(在本例中为10)前面的陈述(return,这里)。

答案 2 :(得分:0)

它是一个if表达式:a if condition else b表示:如果 condition 为true,则表达式的值为 a ,否则 b

你的问题是无关的,似乎你正在使用python 3,你从python 2得到了例子。在python 3中print是一个函数,所以只需添加括号

答案 3 :(得分:-2)

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