如果和内联如果,有哪些优缺点?

时间:2013-10-06 10:18:36

标签: python if-statement inline-if

我对Python中的if和inline之间的区别有点好奇。哪一个更好?

是否有任何理由使用 inline if ,除了它更短的事实?

此声明还有什么问题吗?我收到语法错误:SyntaxError: can't assign to conditional expression

a = a*2 if b == 2 else a = a/w

3 个答案:

答案 0 :(得分:8)

内联if表达式的优点是它是一个表达式,这意味着你可以在其他表达式 - 列表推导,lambda函数等中使用它。

内联if表达式的缺点是它是一个表达式,这意味着你不能在其中使用任何语句。


缺点的一个完美示例正是导致错误的原因:a = a/w是一个语句,因此您无法在表达式中使用它。你必须这样写:

if b == 2:
    a = a*2
else:
    a = a/w

除了在这种特殊情况下,您只想在任何一种情况下为a分配一些东西,所以你可以这样写:

a = a*2 if b==2 else a/w

至于优势,请考虑一下:

odd_numbers = [number if number%2 else number+1 for number in numbers]

如果没有if表达式,你必须将条件包装在一个命名函数中 - 这对于非平凡的情况是一件好事,但在这里过于冗长:

def oddify(number):
    if number%2:
        return number
    else:
        return number+1
odd_numbers = [oddify(number) for number in numbers]

另请注意,以下示例 not 使用if(三元条件)表达式,但if(条件过滤器)子句:

odd_numbers = [number for number in numbers if number % 2]

答案 1 :(得分:6)

使用条件表达式的正确方法是:

result = X if C else Y

你拥有的是:

result = X if C else result = Y

因此,您应该从那里删除result =部分。条件表达式的主要优点是,它是expression。你可以在任何使用普通表达式的地方使用它们,作为赋值表达式的RHS,作为方法/函数参数,在lambdas中,在列表理解中,等等。但是,您不能在其中添加任意语句,例如说print语句。

例如假设您想要列表中的所有偶数整数,但对于所有奇数,您希望值为0。你可以在列表理解中使用它:

result = [x if x % 2 == 0 else 0 for x in li]

答案 2 :(得分:3)

内联if是一个表达式,所以你不能把赋值放在里面。

正确的语法是:

a = a*2 if b == 2 else a/w

至于实用性,这是一个风格问题,也许这对Programmers StackExchange来说是个好问题。