中文文件:
iter(object[, Sentinel])
回傳一個迭代器物件。根據第二個參數的存在,第一個參數的解釋非常不同。如果沒有第二個參數,object 必須是支援迭代協定(__iter__() 方法)的集合對象,或者它必須支援序列協定(整數參數從 0 開始的 __getitem__() 方法)。如果它不支援這些協定中的任何一個,則會引發 TypeError。如果給出了第二個參數哨兵,則物件必須是可呼叫物件。在這種情況下建立的迭代器將在每次呼叫其 __next__() 方法時呼叫不帶參數的物件;如果傳回的值等於sentinel,則會引發StopIteration,否則將傳回該值。
iter() 第二種形式的一個有用應用是讀取檔案的行,直到到達特定行。下列範例讀取文件,直到readline() 方法傳回空白字串:
with open('mydata.txt') as fp: for line in iter(fp.readline, ''):
process_line(line)
process_line(line)
>>> a = iter({'A':1,'B':2}) #字典集合 >>> a <dict_keyiterator object at 0x03FB8A50> >>> next(a) 'A' >>> next(a) 'B' >>> next(a) Traceback (most recent call last): File "<pyshell#36>", line 1, in <module> next(a) StopIteration >>> a = iter('abcd') #字符串序列 >>> a <str_iterator object at 0x03FB4FB0> >>> next(a) 'a' >>> next(a) 'b' >>> next(a) 'c' >>> next(a) 'd' >>> next(a) Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> next(a) StopIteration
# 定义类 >>> class IterTest: def __init__(self): self.start = 0 self.end = 10 def get_next_value(self): current = self.start if current < self.end: self.start += 1 else: raise StopIteration return current >>> iterTest = IterTest() #实例化类 >>> a = iter(iterTest.get_next_value,4) # iterTest.get_next_value为可调用对象,sentinel值为4 >>> a <callable_iterator object at 0x03078D30> >>> next(a) >>> next(a) >>> next(a) >>> next(a) >>> next(a) #迭代到4终止 Traceback (most recent call last): File "<pyshell#22>", line 1, in <module> next(a) StopIteration