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

René Dudfield renesd at gmail.com
Fri Nov 11 10:34:37 CET 2011

On Fri, Nov 11, 2011 at 10:23 AM, Jonathan <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.


ps.  my randomised items subclass is buggy... I forgot that random.shuffle
works in place, and doesn't return a shuffled sequence.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-uk/attachments/20111111/16739911/attachment.html>

More information about the python-uk mailing list