Quindi, stavo guardando il discorso di Raymond Hettinger Transforming Code into Beautiful, Idiomatic Python e lui porta su questo modulo di iter
di cui non ero mai a conoscenza. Il suo esempio è la seguente:Quali sono gli usi di iter (callable, sentinel)?
Invece di:
blocks = []
while True:
block = f.read(32)
if block == '':
break
blocks.append(block)
Usa:
blocks = []
read_block = partial(f.read, 32)
for block in iter(read_block, ''):
blocks.append(block)
dopo aver verificato la documentation di iter
, ho trovato un esempio simile:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
Questo mi sembra abbastanza utile, ma mi stavo chiedendo se tu fossi Pythonis Conoscete tutti gli esempi di questo costrutto che non coinvolgono i loop di lettura I/O? Forse nella libreria standard?
mi viene in mente esempi molto artificiosa, come il seguente:
>>> 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]
>>>
Ma ovviamente questo non è più utile che il built-in iterabili. Inoltre, mi sembra un odore di codice quando assegni lo stato a una funzione. A quel punto, probabilmente avrei dovuto lavorare con una classe, ma se ho intenzione di scrivere una classe, potrei anche implementare il protocollo iteratore per qualunque cosa io voglia realizzare.
per le persone che downvoted la questione o votato per chiudere, apprezzerei un feedback su come fare meglio questa domanda. –