when is filter test applied?

Paul Moore p.f.moore at gmail.com
Tue Oct 3 11:35:47 EDT 2017


My intuition is that the lambda creates a closure that captures the
value of some_seq. If that value is mutable, and "modify some_seq"
means "mutate the value", then I'd expect each element of seq to be
tested against the value of some_seq that is current at the time the
test occurs, i.e. when the entry is generated from the filter.

You say that doesn't happen, so my intuition (and yours) seems to be
wrong. Can you provide a reproducible test case? I'd be inclined to
run that through dis.dis to see what bytecode was produced.

Paul

On 3 October 2017 at 16:08, Neal Becker <ndbecker2 at gmail.com> wrote:
> In the following code (python3):
>
> for rb in filter (lambda b : b in some_seq, seq):
>   ... some code that might modify some_seq
>
> I'm assuming that the test 'b in some_seq' is applied late, at the start of
> each iteration (but it doesn't seem to be working that way in my real code),
> so that if 'some_seq' is modified during a previous iteration the test is
> correctly performed on the latest version of 'some_seq' at the start of each
> iteration.  Is this correct, and is this guaranteed?
>
>
> --
> https://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list