On Fri, 2007-07-20 at 20:10 +0000, Alex Popescu wrote:
> Carsten Haese <[EMAIL PROTECTED]> wrote in
> news:[EMAIL PROTECTED]: 
> 
> > On Fri, 2007-07-20 at 19:08 +0000, Alex Popescu wrote:
> >> Hi all!
> >> 
> 
> >
> > [snip...]
> >
> > 
> > This is called "Look before you leap." Note that "if key in my_dict"
> > is preferred over has_key().
> >
> 
> Can you please detail why in is prefered over has_key? Is it about 
> readability/performance?

Yes, it's about both readability and performance:

[EMAIL PROTECTED] ~]$ python -m timeit -s "a={}" "a.has_key('foo')"
1000000 loops, best of 3: 0.601 usec per loop
[EMAIL PROTECTED] ~]$ python -m timeit -s "a={}" "'foo' in a"
1000000 loops, best of 3: 0.307 usec per loop

> Unfortunately, the get(key, None) suggestion is not 100% equivalent to 
> my posted code, and once I add the addition of the new object to the map 
> I think 1/ and 3/ are equivalent (if no other 
> readability/performance/etc is involved).

Indeed, I missed that in 1/ and 2/ you're also adding the value to the
dictionary. You could use setdefault instead of get:

my_obj = my_dict.setdefault(key, myobject())

But if you want to defer creation of the default value until it's
actually needed, you're better off with the "Look before you leap"
approach.

-- 
Carsten Haese
http://informixdb.sourceforge.net


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to