为什么我们必须使用赋值表达式从 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。
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。