[python-uk] memoize & ordering of kwargs.items()

Jonathan tartley at tartley.com
Fri Nov 11 11:14:50 CET 2011

On 11/11/2011 09:34, René Dudfield wrote:
> On Fri, Nov 11, 2011 at 10:23 AM, Jonathan <tartley at tartley.com 
> <mailto:tartley at tartley.com>> wrote:
>     That's good to know René, but I *think* it's orthogonal to the
>     question. Please correct me if I'm wrong.
>     If PyPy returns items in a different order than CPython, that
>     doesn't matter to me, so long as every invocation of my function
>     in a particular process ends up receiving a particular  order,
>     that doesn't change until the process ends (or the cache is cleared.)
>     The dict subclass is a great idea - but if the change in order
>     isn't ever manifested by a regular dict, then it implies to me
>     that the 'sorted' call isn't actually required in real life, so
>     the need for this whole test disappears.
>     See also my imminent reply to Ross.
>         Jonathan
> Just because your code works Now, does not mean it will work in the 
> future.  Especially when the ordering is explicitly marked as a 
> non-deterministic implementation detail.  Relying on it to be 
> deterministic when it is stated to be non-deterministic will mean that 
> in the future you could get a failure.
> Relying on implementation quirks is fine, but not reliable.  In your 
> case though, the worst that can happen now is a cache miss.  In the 
> future though, your cache could be completely useless because every 
> time the data could be in a different order.
> Testing on multiple platforms allows you to sometimes see a failure 
> condition, which lets you test it.  Likewise, using a randomised dict 
> subclass will let you test your code as if there is an error condition.
> cya.
> ps.  my randomised items subclass is buggy... I forgot that 
> random.shuffle works in place, and doesn't return a shuffled sequence.
> _______________________________________________
> python-uk mailing list
> python-uk at python.org
> http://mail.python.org/mailman/listinfo/python-uk

Hey René,
Thanks for that! I guess I was getting distracted because I was 
interpreting the situation as the fact that .items() for an *arbitrary* 
dictionary may well be non-deterministic, but in this particular case, 
for dictionaries newly-created by the '**' mechanism, they appear to be 
non-deterministic. I was forgetting that this is (presumably) also an 
implementation detail. Regardless, it sounds like you are probably right 
on all counts. Thanks for your enlightening thoughts.

Jonathan Hartley    tartley at tartley.com    http://tartley.com
Made of meat.       +44 7737 062 225       twitter/skype: tartley

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-uk/attachments/20111111/ce397c3a/attachment.html>

More information about the python-uk mailing list