我对Python中的if和inline之间的区别有点好奇。哪一个更好?
是否有任何理由使用 inline if ,除了它更短的事实?
此声明还有什么问题吗?我收到语法错误:SyntaxError: can't assign to conditional expression
a = a*2 if b == 2 else a = a/w
答案 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来说是个好问题。