[Python-ideas] set.add() return value
Raymond Hettinger
python at rcn.com
Thu Feb 12 23:40:02 CET 2009
[Ralf W. Grosse-Kunstleve]
> Instead of
>
> if (1 not in s): # O(N log N) lookup
> s.add(1) # O(N log N) lookup again
> do_something_else()
Three thoughts:
* insertion and lookup times are O(1), not O(n log n).
* because of caching the second lookup is very cheap.
* the bdfl frowns on mutating methods returning anything at all
> if (s.add(1)):
> do_something_else()
I would find this to be useful but don't find it to be
a significant improvement over the original. Also,
I find it to be a bit tricky. Currently, sets have a nearly
zero learning curve and are not imbued with non-obvious
behaviors. The proposed form requires that the reader
knows about the special boolean found/notfound behavior.
Also, since some people do want mutating methods to
return a copy of the collection (i.e. s.add(1).add(2).add(3)),
those folks will find your suggestion to be counter-intuitive.
Raymond
More information about the Python-ideas
mailing list