【发布时间】:2016-06-28 22:41:23
【问题描述】:
所以,我正在观看 Raymond Hettinger 的演讲 Transforming Code into Beautiful, Idiomatic Python,他提出了这种形式的 iter,这是我从未意识到的。他的例子如下:
代替:
blocks = []
while True:
block = f.read(32)
if block == '':
break
blocks.append(block)
用途:
blocks = []
read_block = partial(f.read, 32)
for block in iter(read_block, ''):
blocks.append(block)
查看iter的documentation后,发现了一个类似的例子:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
这对我来说看起来很有用,但我想知道你们中的 Pythonistas 是否知道任何不涉及 I/O 读取循环的构造示例?也许在标准库中?
我能想到非常人为的例子,比如:
>>> def f():
... f.count += 1
... return f.count
...
>>> f.count = 0
>>> list(iter(f,20))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>>
但显然这并不比内置的迭代器有用。此外,当您为函数分配状态时,我觉得代码有异味。那时,我可能应该使用一个类,但如果我要编写一个类,我不妨实现迭代器协议来完成我想要完成的任何事情。
【问题讨论】:
标签: python