我对 Python 中的 if 和 inline if 之间的区别有点好奇。哪一个更好?
除了它更短之外,还有什么理由使用inline if ?
另外,这个说法有什么问题吗?我收到语法错误:SyntaxError: can't assign to conditional expression
a = a*2 if b == 2 else a = a/w
我对 Python 中的 if 和 inline if 之间的区别有点好奇。哪一个更好?
除了它更短之外,还有什么理由使用inline if ?
另外,这个说法有什么问题吗?我收到语法错误:SyntaxError: can't assign to conditional expression
a = a*2 if b == 2 else a = a/w
内联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]
另请注意,以下示例未使用if
(三元条件)表达式,而是使用if
(条件过滤器)子句:
odd_numbers = [number for number in numbers if number % 2]
使用条件表达式的正确方法是:
result = X if C else Y
你所拥有的是:
result = X if C else result = Y
所以,你应该result =
从那里删除部分。条件表达式的主要优点是,它是一个表达式。您可以在使用普通表达式的任何地方使用它们,作为赋值表达式的 RHS,作为方法/函数参数,在 lambdas 中,在列表理解中,等等。但是,您不能只在其中放入任何任意语句,例如 sayprint
语句。
例如,假设您想要列表中的所有偶数,但对于所有奇数,您想要的值为0
. 您可以像这样在列表理解中使用它:
result = [x if x % 2 == 0 else 0 for x in li]
内联 if 是一个表达式,所以你不能把赋值放在里面。
正确的语法是:
a = a*2 if b == 2 else a/w
至于有用性,这是一个风格问题,对于程序员 StackExchange来说,这可能是一个很好的问题。