为什么 print(x += 1) 语法无效?

cry*_*mer 1 python syntax python-3.x

这很好用

x = 0
while True:
    x += 1
    print(x)
Run Code Online (Sandbox Code Playgroud)

而这

x = 0
while True:
    print(x += 1)
Run Code Online (Sandbox Code Playgroud)

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

kin*_*all 5

与许多其他语言不同,在其他语言中,赋值是一个表达式并计算出指定的值,而在 Python 中,赋值是它自己的语句。因此它不能用在表达式中。

这样做的一个优点是,如果您忘记了语句=中的an if(即您本来想写==,但改为写=),您会收到错误:

if a = b:   # this is an assignment not a comparison! SyntaxError
Run Code Online (Sandbox Code Playgroud)

在某些其他语言中,这在语法上是有效的,但不会给你想要的结果,从而导致脱发错误。(这是发明 linter 的原因之一。语言本身并不能阻止你犯这个错误,所以他们创建了一个外部工具来帮助解决这个问题。)

Python 3.8 添加了赋值运算符 ,:=又名海象运算符。它的行为类似于其他语言中的赋值,尽管您仍然不能在任何地方使用它。所以这有效:

x = 0
while True:
    print(x := x + 1)
Run Code Online (Sandbox Code Playgroud)

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