On 11/6/2012 1:19 PM, Devin Jeanpierre wrote:


On Nov 6, 2012 1:05 PM, "Ned Batchelder" <ned@nedbatchelder.com> wrote:
>
> On 11/6/2012 11:26 AM, R. David Murray wrote:
>>
>> On Tue, 06 Nov 2012 18:14:38 +0200, Serhiy Storchaka <storchaka@gmail.com> wrote:
>>>
>>> Another counterintuitive (and possible wrong) example:
>>>
>>>     >>> {print('foo'): print('bar')}
>>>     bar
>>>     foo
>>>     {None: None}
>>
>> http://bugs.python.org/issue11205
>
>
> This seems to me better left undefined, since there's hardly ever a need to know the precise evaluation sequence between keys and values, and retaining some amount of "unspecified" to allow for implementation flexibility is a good thing.

"Left undefined"? The behavior was defined, but CPython didn't follow the defined behaviour.


I would change the reference manual to leave it undefined.  Clearly not many people have been bothered by the fact that CPython implemented it "wrong".  If someone really needs to control whether the keys or values are evaluated first, they shouldn't use a dict literal.

--Ned.

--Devin (phone)