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语句(赋值表达式)的主要内容,如果未能解决你的问题,请参考以下文章

bash中是不是有带赋值(三元条件)的内联if? [复制]

hibernate中写入if判断然后赋值位置没if之后的赋值语句均不执行呢?帮忙看看谢谢!!

if 语句中的赋值语句如何作为条件?

运算符和表达式

分支语句

PL/SQL流程控制