On Sun, Mar 25, 2018 at 2:59 PM, Ethan Furman <et...@stoneleaf.us> wrote:
> On 03/24/2018 08:51 PM, Chris Angelico wrote:
>>
>> On Sun, Mar 25, 2018 at 2:48 PM, Ethan Furman wrote:
>>>
>>> On 03/24/2018 01:35 AM, Nick Coghlan wrote:
>>>
>>>> In comprehensions and generator expressions, we'd need to explain why
>>>> inline assignments in the outermost iterator
>>>> expression leak but those in filter expressions, inner iterator
>>>> expressions, and result expressions don't.
>>>
>>>
>>> I don't understand -- could you give an example?
>>
>>
>> Let's suppose we have assignment expressions. I'm going to use "(expr
>> as name)" syntax for this example.
>>
>> a = [(1 as b) for c in (d as e) if (2 as f)]
>>
>> Which of these six names is local to the comprehension and which can
>> leak? Due to the requirements of class scope, 'd' must be looked up in
>> the outer scope. That means that its corresponding 'as e' must also
>> land in the outer scope. [...]
>
>
> Why?
>
> d = 9
> def func():
>   e = d
>
> d is looked up outside of func, but e is still local to func.

No, it's looked up inside func, and the value is found outside of
func. Consider:

d = 9
def func():
    e = d
    d = 1

What's happening with a comprehension is more like:

d = 9
def func(_iter):
    ... body of comprehension
func((d as e))

which is looking it up _outside_ the function, then passing it as a parameter.

ChrisA
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to