Цикл Python с одинарными (=) - PullRequest
3 голосов
/ 04 ноября 2019

Я пытаюсь реализовать алгоритм максимального потока. Вот мой код:

while path = find_path(residual, source, sink):
    (do whatever)

Да, это преднамеренное одиночное равенство (=) в цикле while. Функция find_path() подключена для возврата действительного пути, если он все еще существует в остаточном графе, но None, если его еще нет. По моему мнению, это должно присвоить path для того, что find_path() возвращает, а затем проверить, чтобы увидеть, делаем ли мы еще одну итерацию. Но вместо этого я получаю синтаксическую ошибку.

Я всегда могу сделать это долго:

while True:
    path = find_path(residual, source, sink)
    if not path: break

Но это кажется не элегантным. Действительно ли это так, что вам просто не разрешено помещать одинаковые равные в цикл в Python из-за частоты ошибок, которые напоминают его?

1 Ответ

6 голосов
/ 04 ноября 2019

Это требует Python 3.8 выражений присваивания :

while path := find_path(residual, source, sink):
    (do whatever) 

Обратите внимание на :.

3.8 был выпущен только в начале октября, поэтому вам, вероятно, придется обновить свою среду, если вы хотите ее использовать.

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