# 迭代器和生成器

### 一. 迭代器

``````from collections.abc import Iterator

class Company(object):
def __init__(self, emplayee_list):
self.employee = emplayee_list

def __iter__(self):
return MyIterator(self.employee)

class MyIterator(Iterator):
def __init__(self, employee_list):
self.iter_list = employee_list
self.index = 0

def __next__(self):
# 真正返回迭代值的逻辑
try:
word = self.iter_list[self.index]
except IndexError:
raise StopIteration
self.index += 1
return word

if __name__ == "__main__":
company = Company(["tom", "bob","jane"])
my_itor = iter(company)
while True:
try:
print(next(my_itor))
except StopIteration:
pass
``````

tom
bob
jane

### 二. 生成器

Prior to beginning tutoring sessions{|}, I ask new students to fill{|} out a brief self-assessment{|} where they rate their{|} understanding of various Python concepts. Some topics ("control flow with if/else" or "defining and using functions") are understood by a majority of students before ever beginning tutoring. There are a handful of topics, however, that almost all{|} students report having no knowledge or very limited understanding of. Of these

``````
def myreadlines(f, newline):
buf = ""
while True:
while newline in buf:
pos = buf.index(newline)
yield buf[:pos]
buf = buf[pos + len(newline):]
chunk = f.read(4096)

if not chunk:
# 说明已经读到文件末尾
yield buf
break

buf += chunk

with open("input.txt") as f:
for line in myreadlines(f, "{|}"):
print(line)
``````