iFelseOneLine在Python中做什么?

2021-05-13 14:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个关于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时,我得到一个错误:

^{pr2}$

在 下面是一个广义形式:

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的错误,我只是没注意。如前所述,如果没有错误,答案就没有意义,因此我删除了错误代码。

3条回答
网友
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,那么条件表达式将被求值,相应的元素(在本例中是1或{})返回到前面的语句(return,这里)。在

网友
2楼 ·

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

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

网友
3楼 ·

您已经找到了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参数包装在括号中。这是对Python3的一个更改,而在Python2中,您的语法应该是很好的。重写如下:

if test1: print(x if test2 else y)

你的错误就会消失。在

相关问题