[python] Python 3에서 generator.next ()가 표시됩니까?
예를 들어 시리즈를 생성하는 생성기가 있습니다.
def triangle_nums():
'''Generates a series of triangle numbers'''
tn = 0
counter = 1
while True:
tn += counter
yield tn
counter += + 1
파이썬 2에서는 다음과 같은 호출을 할 수 있습니다.
g = triangle_nums() # get the generator
g.next() # get the next value
그러나 파이썬 3에서는 동일한 두 줄의 코드를 실행하면 다음 오류가 발생합니다.
AttributeError: 'generator' object has no attribute 'next'
그러나 루프 반복기 구문은 Python 3에서 작동합니다.
for n in triangle_nums():
if not exit_cond:
do_something()...
파이썬 3의 동작의 차이점을 설명하는 것을 아직 찾을 수 없었습니다.
답변
g.next()
로 이름이 변경되었습니다 g.__next__()
. 특별한 방법이 좋아 : 그 이유는 일관성입니다 __init__()
및 __del__()
모든 이중 밑줄 (또는 현재 고장에서 “던더”)을 가지고 있고, .next()
그 규칙에 대한 몇 가지 예외 중 하나였다. 이것은 파이썬 3.0에서 수정되었습니다. [*]
그러나을 호출하는 대신을 g.__next__()
사용하십시오 next(g)
.
[*]이 수정 사항을받은 다른 특수 속성이 있습니다. func_name
, 지금 __name__
, 등
답변
답변
코드가 Python2 및 Python3에서 실행되어야하는 경우 다음 과 같이 2to3 6 라이브러리를 사용하십시오 .
import six
six.next(g) # on PY2K: 'g.next()' and onPY3K: 'next(g)'