【发布时间】:2018-01-22 22:37:32
【问题描述】:
在__iter__() 函数中使用生成器(yield) 有什么好处?通读 Python Cookbook 后,我明白“如果您希望生成器向用户公开额外的状态,请不要忘记您可以轻松
将其实现为一个类,将生成器函数代码放在__iter__() 方法中。”
import io
class playyield:
def __init__(self,fp):
self.completefp = fp
def __iter__(self):
for line in self.completefp:
if 'python' in line:
yield line
if __name__ =='__main__':
with io.open(r'K:\Data\somefile.txt','r') as fp:
playyieldobj = playyield(fp)
for i in playyieldobj:
print I
问题:
- 这里的额外状态是什么意思?
- 在
__iter__ ()中使用yield而不是为yield使用单独的函数有什么好处?
【问题讨论】:
-
因为现在
playyield是iterable,但您不必编写iterator 类,因为现在playyied.__iter__返回一个生成器,这是一个迭代器。挺方便的。 -
您的问题没有提供完整的上下文。您在 Python Cookbook 中提到的引用与问题
**Problem:** You would like to define a generator function, but it involves extra state that you would like to expose to the user somehow有关。这里的extra state暗示了与程序其他部分相关的其他信息。 -
我也建议检查一下blog post
标签: python yield-keyword