为什么我们必须使用赋值表达式从 await 中获取 return 值?

Why we have to use Assignment Expressions in obtaining the return value from await?

import asyncio
from asyncio import StreamReader

async def echo(reader: StreamReader):
    try:
        while data := await reader.readline():
            pass

问题> 为什么我们必须在这里 data := await 而不是 data = await

Error from python compiler:

while data = await reader.readline():
           ^ SyntaxError: invalid syntax

= 的赋值被明确设计为不在较大的表达式中进行这种嵌套副作用。对于其他语言(看看你,C),人们可以在他们打算使用 == 的地方键入 = 并意外地分配一些东西。请参阅 this question 以了解有关 = 为何如此设计的更多讨论。

= 的赋值是语句而不是表达式,它不会计算等号右侧的内容。这意味着暂时没有价值来测试以决定是否继续。 :=(又名海象运算符)提供了 while 可以测试的值,请参阅 this question