Also, ich beobachtete Raymond Hettinger's Gespräch Transforming Code into Beautiful, Idiomatic Python und er bringt diese Form von iter
, die ich nie bewusst war. Sein Beispiel ist die folgende:Was sind die Verwendungen von iter (aufrufbar, Sentinel)?
Statt:
blocks = []
while True:
block = f.read(32)
if block == '':
break
blocks.append(block)
Verwendung:
blocks = []
read_block = partial(f.read, 32)
for block in iter(read_block, ''):
blocks.append(block)
Nach Überprüfung der documentation von iter
, fand ich ein ähnliches Beispiel:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
Diese Sieht für mich ziemlich nützlich aus, aber ich habe mich gefragt, ob von dir Pythonis kennen Sie irgendwelche Beispiele dieses Konstrukts, die keine I/O-Leseschleifen beinhalten? Vielleicht in der Standardbibliothek?
ich sehr gekünstelt Beispiele denken kann, wie folgt aus:
>>> 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]
>>>
Aber offensichtlich ist dies nicht mehr sinnvoll, dass die eingebaute in Iterables. Außerdem scheint es für mich Code-Geruch zu sein, wenn Sie einer Funktion einen Status zuweisen. An diesem Punkt sollte ich wahrscheinlich mit einer Klasse arbeiten, aber wenn ich eine Klasse schreibe, könnte ich genauso gut das Iterator-Protokoll für alles implementieren, was ich erreichen möchte.
Für Menschen, die die Frage oder stimmten Downvoted zu schließen, würde ich ein Feedback, wie schätzt besser diese Frage zu stellen. –