所以,我在觀看Raymond Hettinger的談話Transforming Code into Beautiful, Idiomatic Python,他提出了我從未意識到的這種形式的iter
。他的例子是:iter(callable,sentinel)的用途是什麼?
相反的:
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)
這看起來對我很有用,但我想知道你是否是Pythonis tas知道這個構造不包含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]
>>>
但顯然這是沒有任何更多有用的內置iterables。另外,當你將狀態分配給一個函數時,它看起來像代碼給我的味道。那時候,我可能應該和一個類一起工作,但是如果我要編寫一個類,那麼我也可以爲我想完成的任何事情實現迭代器協議。
對於downvoted問題或投票決定關閉的人,我希望得到一些反饋,如何更好地問這個問題。 –