On 31/08/2010 23:11, Cameron Simpson wrote:
On 31Aug2010 22:53, MRAB<pyt...@mrabarnett.plus.com> wrote:
[...]
|>>>def m(arg):
|>>>if arg& set([1,2,3]):
|>
|>set() is a function call, not a literal. When m is called, who knows
|>what 'set' will be bound to? In Py3, at least, you could write {1,2,3},
|>which is much faster as it avoids creating and deleting a list. On my
|>machine, .35 versus .88 usec. Even then, it must be calculated each time
|>because sets are mutable and could be returned to the calling code.
|>
| There's still the possibility of some optimisation. If the resulting
| set is never stored anywhere (bound to a name, for example) then it
| could be created once. When the expression is evaluated there could be
| a check so see whether 'set' is bound to the built-in class, and, if it
| is, then just use the pre-created set.
Wouldn't you need to repeat that check every time, otherwise "set" may
no longer be the builtin?
Isn't that what I said?
My point is that if you have a set of constants which is created and
then discarded you can cache it and reuse it next time. You check every
time whether 'set' is bound to the set class.
--
http://mail.python.org/mailman/listinfo/python-list