On 7 May 2018 at 12:51, Nick Coghlan <ncoghlan@gmail.com> wrote:
If any other form of comprehension level name binding does eventually get accepted, then inline scope declarations could similarly be used to hoist values out into the surrounding scope:

        rem = None
        while any((nonlocal rem := n % p) for nonlocal p in small_primes):
            # p and rem were declared as nonlocal in the nested scope, so our rem and p point to the last bound value

Thinking about it a little further, I suspect the parser would reject "nonlocal name := ..." as creating a parsing ambiguity at statement level (where it would conflict with the regular nonlocal declaration statement).

The extra keyword in the given clause would avoid that ambiguity problem:

        p = rem = None
        while any(rem for nonlocal p in small_primes given nonlocal rem = n % p):
            # p and rem were declared as nonlocal in the nested scope, so our p and rem refer to their last bound values

Such a feature could also be used to make augmented assignments do something useful at comprehension scope:

    input_tally = 0
    process_inputs(x for x in input_iter given nonlocal input_tally += x)

Cheers,
Nick.

--
Nick Coghlan   |   ncoghlan@gmail.com   |   Brisbane, Australia