Почему мы должны использовать Assignment Expressions при получении возвращаемого значения из await? - PullRequest
1 голос
/ 19 февраля 2020
import asyncio
from asyncio import StreamReader

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

Вопрос> почему мы должны data := await здесь вместо data = await?

Ошибка компилятора python:

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

1 Ответ

2 голосов
/ 19 февраля 2020

Назначение с = было специально разработано, чтобы не делать такого рода вложенных побочных эффектов внутри большего выражения. На других языках (глядя на вас C) люди могут набрать = там, где они хотели использовать ==, и назначить что-то случайно. См. этот вопрос для дальнейшего обсуждения того, почему = был разработан таким образом.

Назначение с = является утверждением, а не выражением, оно не оценивает то, что справа сторона знака равенства. Это означает, что пока нет смысла тестировать, чтобы решить, стоит ли продолжать. := (AKA - оператор моржа) предоставляет значение, которое может проверить тест, см. этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...