python3中带有内联赋值的if语句(赋值表达式)
Posted
技术标签:
【中文标题】python3中带有内联赋值的if语句(赋值表达式)【英文标题】:if statement with inline assignment in python3 ( assignment expression ) 【发布时间】:2021-11-23 17:03:33 【问题描述】:给定python(3)中的如下语句:
import math
for i in range(100):
if((result = math.factorial(i)) % 10 == 0):
print(i,"->",result)
这不可能吗(就像在 C 中一样)?
【问题讨论】:
不,这在 Python 中是不可能的。此外,即使在允许这样做的语言中,这也是不好的做法。 这能回答你的问题吗? Assignment in conditional not permitted in Python? 引用的链接提出了与我提出的相同的问题,但它没有提供解决方案。下面的答案以“海象”运算符的形式提供了解决方案。 【参考方案1】:这称为赋值表达式,通过在 Python 3.8 中引入海象运算符 :=
使之成为可能:
import math
for i in range(100):
if (result := math.factorial(i)) % 10 == 0:
print(i, "->", result)
但是请注意,它的使用并非没有争议。始终以可读和可理解的代码为目标。以上内容相当密集,将受益于循环体中的局部变量:
import math
for i in range(100):
result = math.factorial(i)
if result % 10 == 0:
print(i, "->", result)
【讨论】:
我不太明白您所说的“从局部变量中受益”是什么意思?那么我的“密集版本”会从局部变量中受益吗? @Krischu 的可读性得益于它,因为复杂的语句被分解成两个更容易理解、调试和修改的语句 @Krischu 我回答你的问题了吗?如果我解决了您的问题,请考虑将答案标记为已接受。否则,请告诉我我还能提供什么帮助!以上是关于python3中带有内联赋值的if语句(赋值表达式)的主要内容,如果未能解决你的问题,请参考以下文章