В Python yield
используется для генерации . Например:
def func():
i =0
while True:
i += 1
yield i
Если я правильно помню Python, это должно позволить этой функции в основном приостанавливать выполнение и вызываться снова и снова. Это может генерировать некоторую последовательность, например {0,1,2,3...}
.
. С другой стороны, return
просто возвращает одно значение и завершает выполнение:
def func():
i =0
while True:
i += 1
return i
Это всегда должно возвращать 0
,поскольку функция полностью завершает выполнение, поэтому i
каждый раз выходит из области видимости.
С другой стороны, C ++ не имеет прямого реального эквивалента yield
, насколько я знаю (кромепо-видимому, в новом C ++ 20 , который добавляет эквивалент), где он имеет эквивалент (во всех версиях) здесь return
. Это, конечно, называется return
.
Тем не менее, C ++ может достичь чего-то похожего на наш пример выхода, используя статические переменные :
int func() {
static i = 0;
return i++;
}
Однако,это не означает, что статические переменные являются заменой yield
в C ++. Просто в этом (и, возможно, в другом) примере (-ах) вы можете добиться того же в C ++ со статическими переменными.
Итак, return
завершает выполнение функциина обоих языках, тогда как yield
позволяет функции сортировать выполнение резюме. Не существует реального эквивалента для yield
Python в C ++, по крайней мере, до C ++ 20 .