[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.
Cheers,
Jonathan
--
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