【发布时间】:2020-05-25 12:00:24
【问题描述】:
def read_large_file(file_handler, block_size=10000):
block = []
for line in file_handler:
block.append(line)
if len(block) == block_size:
yield block
block = []
# don't forget to yield the last block
if block:
yield block
with open(path) as file_handler:
for block in read_large_file(file_handler):
print(block)
我正在阅读上面由另一个人编写的这段代码。对于这一行:
if len(block) == block_size:
yield block
block = []
block=[] 有机会被执行吗?我原以为yield 就像return 声明。另外,为什么会有if block 检查?
【问题讨论】:
-
是的。您可以说
yield是一种暂停执行并从下一行重新开始执行的方法。放置一个打印语句来检查它是否被执行。 -
通过在你的函数中添加yield,这个函数就变成了一个生成器函数。详情可以查看here
-
顺便说一句,该函数仅在大小恰好为
block_size时才会产生。使用if len(block) >= block_size:可能会更好。