[Chicago] I don't get why this works

Jeff Hinrichs - DM&T jeffh at dundeemt.com
Tue Apr 2 05:57:17 CEST 2013


not discompile (ick) meant disassemble.


On Mon, Apr 1, 2013 at 10:53 PM, Jeff Hinrichs - DM&T <jeffh at dundeemt.com>wrote:

> Python 2.7.3 (default, Aug  1 2012, 05:14:39)
> [GCC 4.6.3] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> def foo():
> ...    a = {}
> ...    a['a'] = a[a['a']] = 'b'
> ...    return a
> ...
> >>> import dis
> >>> dis.dis(foo)
>   2           0 BUILD_MAP                0
>               3 STORE_FAST               0 (a)
>
>   3           6 LOAD_CONST               1 ('b')
>               9 DUP_TOP
>              10 LOAD_FAST                0 (a)
>              13 LOAD_CONST               2 ('a')
>              16 STORE_SUBSCR
>              17 LOAD_FAST                0 (a)
>              20 LOAD_FAST                0 (a)
>              23 LOAD_CONST               2 ('a')
>              26 BINARY_SUBSCR
>              27 STORE_SUBSCR
>
>   4          28 LOAD_FAST                0 (a)
>              31 RETURN_VALUE
>
> -Jeff
> slightly modified to make easier to discompile
>
>
> On Mon, Apr 1, 2013 at 10:50 PM, Brantley Harris <deadwisdom at gmail.com>wrote:
>
>> So it evaluates the right, then left to right.  That's strange.
>>
>>
>> On Mon, Apr 1, 2013 at 10:46 PM, Alex Gaynor <alex.gaynor at gmail.com>wrote:
>>
>>> Sorry, I should have been more precise, first the far right hand side is
>>> evaluated, so you get the string 'b' (of course). Then the assignments are
>>> evaluated left to right.
>>>
>>> So first:
>>>
>>> a['a'] = 'b'
>>>
>>> Then
>>>
>>> a[a['a']] = 'b'
>>>
>>> Now a['a'] == 'b'
>>>
>>> so a['b'] = 'b'.
>>>
>>> Alex
>>>
>>>
>>> On Mon, Apr 1, 2013 at 8:41 PM, Brantley Harris <deadwisdom at gmail.com>wrote:
>>>
>>>> Okay, then it should be a key error:
>>>>
>>>> > a['a'] = a[a['a']]
>>>> KeyError: 'a'
>>>>
>>>>
>>>> On Mon, Apr 1, 2013 at 10:25 PM, Alex Gaynor <alex.gaynor at gmail.com>wrote:
>>>>
>>>>> The assignments are going left to right.
>>>>>
>>>>> Alex
>>>>>
>>>>>
>>>>> On Mon, Apr 1, 2013 at 8:24 PM, Brantley Harris <deadwisdom at gmail.com>wrote:
>>>>>
>>>>>> > a = {}
>>>>>> > a['a'] = a[a['a']] = 'b'
>>>>>> {'a': 'b', 'b': 'b'}
>>>>>>
>>>>>> What the what?  I would think that should KeyError, but it runs fine.
>>>>>>  Someone splain.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Chicago mailing list
>>>>>> Chicago at python.org
>>>>>> http://mail.python.org/mailman/listinfo/chicago
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> "I disapprove of what you say, but I will defend to the death your
>>>>> right to say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
>>>>> "The people's good is the highest law." -- Cicero
>>>>>
>>>>> _______________________________________________
>>>>> Chicago mailing list
>>>>> Chicago at python.org
>>>>> http://mail.python.org/mailman/listinfo/chicago
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Chicago mailing list
>>>> Chicago at python.org
>>>> http://mail.python.org/mailman/listinfo/chicago
>>>>
>>>>
>>>
>>>
>>> --
>>> "I disapprove of what you say, but I will defend to the death your right
>>> to say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
>>> "The people's good is the highest law." -- Cicero
>>>
>>> _______________________________________________
>>> Chicago mailing list
>>> Chicago at python.org
>>> http://mail.python.org/mailman/listinfo/chicago
>>>
>>>
>>
>> _______________________________________________
>> Chicago mailing list
>> Chicago at python.org
>> http://mail.python.org/mailman/listinfo/chicago
>>
>>
>
>
> --
> Best,
>
> Jeff Hinrichs
> 402.218.1473
>
>


-- 
Best,

Jeff Hinrichs
402.218.1473
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/chicago/attachments/20130401/6d7912fd/attachment-0001.html>


More information about the Chicago mailing list