programing

generator.next()는 Python 3에 표시됩니까?

firstcheck 2023. 1. 21. 09:59
반응형

generator.next()는 Python 3에 표시됩니까?

직렬을 생성하는 제너레이터가 있습니다. 예를 들어 다음과 같습니다.

def triangle_nums():
    '''Generates a series of triangle numbers'''
    tn = 0
    counter = 1
    while True:
        tn += counter
        yield tn
        counter += + 1

Python 2 에서는, 다음의 콜을 발신할 수 있습니다.

g = triangle_nums()  # get the generator
g.next()             # get the next value

그러나 Python 3에서 동일한 두 줄의 코드를 실행하면 다음과 같은 오류가 발생합니다.

AttributeError: 'generator' object has no attribute 'next'

그러나 루프 반복기 구문은 Python 3에서 작동합니다.

for n in triangle_nums():
    if not exit_cond:
       do_something()...

Python 3의 동작의 차이를 설명할 수 있는 것을 아직 찾을 수 없었습니다.

g.next()로 이름이 변경되었습니다.g.__next__()그 이유는 일관성이 있기 때문입니다: 다음과 같은 특별한 방법__init__()그리고.__del__()모두 이중 밑줄(또는 현재 자국어로는 "dunder")이 있습니다..next()그 규칙의 몇 안 되는 예외 중 하나였습니다.이것은 Python 3.0에서 수정되었습니다.[*]

하지만 전화하는 대신g.__next__(), 를 사용합니다.

[*] 이 수정을 받은 다른 특별한 특성이 있습니다.func_name현재,__name__

시험:

next(g)

이 표에서 2와 3의 구문 차이를 확인할 수 있습니다.

코드가 Python2 및 Python3에서 실행되어야 하는 경우 2to3 6 라이브러리를 다음과 같이 사용합니다.

import six

six.next(g)  # on PY2K: 'g.next()' and onPY3K: 'next(g)'

언급URL : https://stackoverflow.com/questions/1073396/is-generator-next-visible-in-python-3

반응형