iter()
iter()
iter(object[, sentinel])
이 함수는iterator 대상을 되돌려주지만,object는sentinel의 전송 여부에 따라 다른 해석을 얻을 수 있습니다.
sentinel에 전송되지 않은 경우 object는 교체 프로토콜 ((
__iter__()
방법) 을 지원하는 집합 (collection) 대상이어야 한다.또는 시퀀스 프로토콜을 지원하는 대상 (the __getitem__()
method with integer arguments starting at 0
이다.만약 이 두 프로토콜이 모두 Object에 지원되지 않는다면 iter()
은 던져질 것이다. TypeError
Tips: 여기서 언급한 집합 대상은 추상적인 개념일 뿐 Collection 유형을 특별히 가리키는 것이 아니라 __iter__()
방법만 실현하면 iter
함수를 지원할 수 있다.마찬가지로 실현__getitem__()
방법만 지원iter
함수.class ObjcIter:
def __iter__(self):
cont = 0
while cont < 3:
cont += 1
yield cont
a_iter1 = iter(ObjcIter())
print(list(a_iter1))
class ObjcGetitem:
def __getitem__(self, item):
cont = 0
while cont <= item:
cont += 1
if cont >= 5:
raise StopIteration()
return cont
a_iter2 = iter(ObjcGetitem())
print(list(a_iter2))
출력:
[1, 2, 3]
[1, 2, 3, 4]
목록, 모듈, 사전 등은 모두
iter
의 매개 변수로 직접 사용할 수 있다.>>> i = iter([1, 2, 3])
>>> i.next()
1
>>> i.next()
2
>>> i.next()
3
>>> i.next()
Traceback (most recent call last):
File "", line 1, in
StopIteration
두 번째 인자인sentinel을 전송했다면, 이 때object는 호출 가능한 대상이어야 합니다.이러한 상황에서 만들어진 교체기는
__next__()
방법을 호출할 때마다 매개 변수 없이object를 호출합니다.만약object의 반환값이sentinel과 같으면 던진다StopIteration
.만약 반환 값이 sentinel과 같지 않으면, 이 값을 직접 반환합니다.예를 들면 다음과 같습니다.class AutoIncrement(object):
""" , 1"""
def __init__(self):
self._count = 0
def __call__(self):
self._count += 1
return self._count
a_iter = AutoIncrement()
for i in iter(a_iter, 3):
# a_iter() 5 , StopIteration
#
print(i, end=',')
출력:
1,2,
함수 객체를 직접 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
_count = 0
def func():
global _count
_count += 1
return _count
for i in iter(func, 3):
print(i, end=",")
출력:
1,2,
iter()
두 번째 파라미터가 있는 사용 장면은 파일의 여러 줄을 한꺼번에 읽을 수 있고 특정한 줄에서 읽기를 멈출 수 있다는 것이다.다음 예는 빈 문자열이 되돌아올 때까지 파일을 계속 읽을 것입니다.with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
교체기에 대한 자세한 내용은 Iterator Types 를 참조하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.