Quick survey: locals in comprehensions (Python 3 only)

Antoon Pardon antoon.pardon at vub.be
Tue Jun 26 06:22:01 EDT 2018


On 26-06-18 12:09, Chris Angelico wrote:
> On Tue, Jun 26, 2018 at 8:04 PM, Antoon Pardon <antoon.pardon at vub.be> wrote:
>> On 26-06-18 11:22, Steven D'Aprano wrote:
>>> On Tue, 26 Jun 2018 10:20:38 +0200, Antoon Pardon wrote:
>>>
>>>>> def test():
>>>>>     a = 1
>>>>>     b = 2
>>>>>     result = [value for key, value in locals().items()]
>>>>>     return result
>>> [...]
>>>
>>>> I would expect an UnboundLocalError: local variable 'result' referenced
>>>> before assignment.
>>> Well, I did say that there's no right or wrong answers, but that
>>> surprises me. Which line do you expect to fail, and why do you think
>>> "result" is unbound?
>> I would expect the third statement to fail because IMO we call the locals
>> function before result is bound. But result is a local variable so the
>> locals function will try to reference it, hence the UnboundLocalError.
> Would you expect the same behaviour from this function?
>
> def test():
>     a = 1
>     b = 2
>     result = locals()
>     return result
>
> ChrisA

Yes, but not to the same degree. Somehow I expect this function to produce a
dictionary that has "result" as key, yet will raise an error when you try
to access the value associated with that key.

But in the original "items" is called, so that tries to reference the value
immediatly and so I expect an error immediatly.

-- 
Antoon Pardon. 




More information about the Python-list mailing list