[Python] What are the uses of iter(callable, sentinel)?

Discussão em 'Python' iniciado por Stack, Maio 19, 2025.

  1. Stack

    Stack Membro Participativo

    So, I was watching Raymond Hettinger's talk Transforming Code into Beautiful, Idiomatic Python and he brings up this form of iter which I was never aware of. His example is the following:

    Instead of:

    blocks = []
    while True:
    block = f.read(32)
    if block == '':
    break
    blocks.append(block)


    Use:

    blocks = []
    read_block = partial(f.read, 32)
    for block in iter(read_block, ''):
    blocks.append(block)


    After checking the documentation of iter, I found a similar example:

    with open('mydata.txt') as fp:
    for line in iter(fp.readline, ''):
    process_line(line)


    This looks pretty useful to me, but I was wondering if of you Pythonistas know of any examples of this construct that doesn't involve I/O-read loops? Perhaps in the Standard Library?

    I can think of very contrived examples, like the following:

    >>> 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]
    >>>


    But obviously this is not any more useful that the built-in iterables. Also, it seems like code smell to me when you are assigning state to a function. At that point, I'd likely should be working with a class, but if I'm going to write a class, I might as well implement the iterator protocol for whatever I want to accomplish.

    Continue reading...

Compartilhe esta Página