python-3.x 为什么print(x += 1)语法无效?

mftmpeh8  于 2023-01-10  发布在  Python
关注(0)|答案(2)|浏览(153)

这个很好用

x = 0
while True:
    x += 1
    print(x)

而这

x = 0
while True:
    print(x += 1)


我想要一个程序,计数到无穷大或至少直到最大位数

e0bqpujr

e0bqpujr1#

与许多其他语言不同,赋值语句是一个表达式,并计算出所赋的值,在Python中,赋值语句是它自己的语句,因此它不能用在表达式中。
这样做的一个好处是,如果您忘记了if语句中的=(即您本打算写==,但却写了=),则会得到一个错误:

if a = b:   # this is an assignment not a comparison! SyntaxError

在某些其他语言中,这在语法上是有效的,但却不能给予你想要的结果,从而导致脱发(这是发明linter的原因之一,语言本身并不能防止你犯这种错误,所以他们创造了一个外部工具来帮助你)。
Python 3.8添加了赋值运算符:=,也就是海象运算符,它的行为与其他语言中的赋值运算符类似,所以它是这样工作的:

x = 0
while True:
    print(x := x + 1)

不幸的是(或幸运的是)没有+:=,我猜你会称之为增强海象。

6mw9ycah

6mw9ycah2#

因为print()的参数需要是表达式,而赋值语句不是表达式。
Python中引入walrus operator:=就是为了让你可以这么做,尽管它没有一个允许你递增的变量。

x = 0
while True:
    print(x := x + 1)

不过,我觉得这并不是该操作符的一种特别好或特别习惯的用法。

相关问题