파이썬 3의 수율 생성기에는 next () 함수가 없습니다.


84

에서 이 질문에 , 파이썬 생성기를 사용하여 끝없는 순서를 가지고있다. 그러나 동일한 코드는 next()기능 이없는 것처럼 보이기 때문에 Python 3에서 작동하지 않습니다 . next함수에 해당하는 것은 무엇입니까 ?

def updown(n):
    while True:
        for i in range(n):
            yield i
        for i in range(n - 2, 0, -1):
            yield i

uptofive = updown(6)
for i in range(20):
    print(uptofive.next())


이 코드는 어떻게 작동합니까? 나는 그것이 작동한다는 것을 알지만 내가 읽은 것에서 "yield 문에 도달하면 코드의 실행이 중지된다". ( python-course.eu/python3_generators.php ). 첫 번째 for i in range(n)에서는 왜 yield단순히 "1"을 반환 하지 않습니까? 대신 범위의 첫 번째 값 이후에 코드가 계속되고 전체 범위를 산출하는데, 이는 yield가 한 번에 여러 번 호출되는 것처럼 보입니다. 뉘앙스를 이해하는 데 약간의 어려움이 있습니다.
Mike S

for함수에서 생성 된 생성기 객체를 처음 호출 할 때 처음부터를 칠 때까지 함수의 코드를 실행 yield한 다음 루프의 첫 번째 값을 반환합니다. 그런 다음 서로 호출하면 함수에 작성한 루프를 한 번 더 실행하고 반환 할 값이 없을 때까지 다음 값을 반환합니다. ( 이 자습서
Mattia Paterna

답변:


123

파이썬 3에서 사용하는 next(uptofive)대신 uptofive.next().

내장 next()함수는 Python 2.6 이상에서도 작동합니다.


36
Whyyyyyyyyyyyyyy
Kenny Worden

44

Python 3에서는 구문의 일관성을 높이기 위해 next()메서드 이름이 __next__(). 당신은 그것을 사용할 수 있습니다. 이것은 PEP 3114에 설명되어 있습니다.

Greg의 솔루션을 따르고 내장 next()함수 (그런 다음 객체의 __next__()메소드 를 찾으려고 시도 함)를 호출하는 것이 좋습니다.


1
특히 함수는 버전 2와 3간에 이식 가능하지만 메서드 (이름 변경으로 인해)는 그렇지 않습니다.
holdenweb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.