On Thu, Jun 11, 2015 at 8:33 AM, Sean Dague <s...@dague.net> wrote: > On 06/11/2015 09:02 AM, Jay Pipes wrote: >> On 06/11/2015 01:16 AM, Robert Collins wrote: >>> But again - where in OpenStack does this matter the slightest? >> >> Precisely. I can't think of a single case where we are iterating over >> anywhere near the number of dictionary items that we would see any >> impact whatsoever.
In neutron, the ovsdb native code iterates over fairly large dictionaries since the underlying OVS library stores OVSDB tables completely in memory as dicts. I just looked at the code I wrote and it currently uses values() and I now want to switch it to six.itervalues() :p. >> Best, >> -jay > > +1. > > This is a massive premature optimization which just makes all the code > gorpy for no real reason. Premature optimization is about wasting a bunch of time trying to optimize code before you know you need to, not about following the accepted almost-always-faster/always-less-memory-using solution that already exists. Memory-wise it's the difference between a constant 88-byte iterator and the storage for an additional list of tuples. And if Raymond Hettinger, in a talk called "Transforming Code Into Beautiful Idiomatic Python" specifically mentions that people should always use iteritems (https://www.youtube.com/watch?v=OSGv2VnC0go&feature=youtu.be&t=21m24s), I tend to believe him. Sure, it'd be much better if Python 3 and Python 2 both returned iterators for items(), values(), keys(), etc., but it doesn't. Wasting memory for purely aesthetic reasons (they're even both the same number of lines) is just a bad idea, IMNSHO. Terry __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev