반응형
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
반응형
'programing' 카테고리의 다른 글
자동 증가 시작 번호를 변경하시겠습니까? (0) | 2023.01.21 |
---|---|
PHP 함수 호출(REEDOC 문자열 내) (0) | 2023.01.21 |
Larabel 5 관계를 쿼리하면 "null에서 멤버 함수 addEagerConstraints() 호출" 오류가 발생합니다. (0) | 2023.01.21 |
날짜 범위로부터 일수를 생성하다 (0) | 2023.01.21 |
n초마다 특정 코드 실행 (0) | 2023.01.21 |