这个很好用
x = 0 while True: x += 1 print(x)
而这
x = 0 while True: print(x += 1)
不我想要一个程序,计数到无穷大或至少直到最大位数
e0bqpujr1#
与许多其他语言不同,赋值语句是一个表达式,并计算出所赋的值,在Python中,赋值语句是它自己的语句,因此它不能用在表达式中。这样做的一个好处是,如果您忘记了if语句中的=(即您本打算写==,但却写了=),则会得到一个错误:
if
=
==
if a = b: # this is an assignment not a comparison! SyntaxError
在某些其他语言中,这在语法上是有效的,但却不能给予你想要的结果,从而导致脱发(这是发明linter的原因之一,语言本身并不能防止你犯这种错误,所以他们创造了一个外部工具来帮助你)。Python 3.8添加了赋值运算符:=,也就是海象运算符,它的行为与其他语言中的赋值运算符类似,所以它是这样工作的:
:=
x = 0 while True: print(x := x + 1)
不幸的是(或幸运的是)没有+:=,我猜你会称之为增强海象。
+:=
6mw9ycah2#
因为print()的参数需要是表达式,而赋值语句不是表达式。Python中引入walrus operator:=就是为了让你可以这么做,尽管它没有一个允许你递增的变量。
print()
不过,我觉得这并不是该操作符的一种特别好或特别习惯的用法。
2条答案
按热度按时间e0bqpujr1#
与许多其他语言不同,赋值语句是一个表达式,并计算出所赋的值,在Python中,赋值语句是它自己的语句,因此它不能用在表达式中。
这样做的一个好处是,如果您忘记了
if
语句中的=
(即您本打算写==
,但却写了=
),则会得到一个错误:在某些其他语言中,这在语法上是有效的,但却不能给予你想要的结果,从而导致脱发(这是发明linter的原因之一,语言本身并不能防止你犯这种错误,所以他们创造了一个外部工具来帮助你)。
Python 3.8添加了赋值运算符
:=
,也就是海象运算符,它的行为与其他语言中的赋值运算符类似,所以它是这样工作的:不幸的是(或幸运的是)没有
+:=
,我猜你会称之为增强海象。6mw9ycah2#
因为
print()
的参数需要是表达式,而赋值语句不是表达式。Python中引入walrus operator
:=
就是为了让你可以这么做,尽管它没有一个允许你递增的变量。不过,我觉得这并不是该操作符的一种特别好或特别习惯的用法。