How do Assignment Expressions `:=` work in Python?

倾然丶 夕夏残阳落幕 提交于 2021-02-07 11:32:43

问题


I've read PEP 572 about assignment expressions and I found this code to be a clear example where I could use it:

while line := fp.readline():
    do_stuff(line)

But I am confused, from what I read, it is supposed to work just like normal assignment but return the value. But it doesn't appear to work like that:

>>> w:=1
  File "<stdin>", line 1
    w:=1
     ^
SyntaxError: invalid syntax

Now after tinkering with it I realised the following works:

>>> (w:=1)
1

But it feels so unpythonic. It is the only operator that requires parentheses:

>>> w = 1
>>> w + w
2
>>> w == w
True
>>> w is w
True
>>> w < w
False

Is there a reason for it to be treated by the parser differently than literally anything else in Python...? I feel like I am missing something. This is not just an operator.

It would be super useful to use := in the REPL to assign variables as the value would be displayed.


(Update: I do not encourage opinionated discussion on this sensitive topic. Please avoid posting comments or answers other than useful ones.)


回答1:


As GreenCloakGuy mentioned, it is there to avoid confusion, as said here, I think this line sums it all:

there is no syntactic position where both = and := are valid.

It also makes things like these invalid because too confusing:

y0 = y1 := f(x)
foo(x = y := f(x))


来源:https://stackoverflow.com/questions/54544744/how-do-assignment-expressions-work-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!