Ruediger wrote:
I am aware that id is a built in function why shouldn't i use it?
I consider this a sensible thing to have tried, but I an not too
surprised it does not work because I am aware that built-in functions do
not have all the features of Python function.
I have asked about this case on Py-dev.
Subject: Can/should built-in functions get __get__?
Replaceing lambda with id was intended as an performance hack. Profiling
proofed that lambda itself takes more than twice as much cpu time than id
alone. (profile shortened)
3610503 function calls in 22.451 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
960096 4.593 0.000 6.702 0.000 test14.py:33(<lambda>)
1 0.003 0.003 22.451 22.451 {execfile}
960096 2.109 0.000 2.109 0.000 {id}
However using lambda seemed useless to me since id already took an argument
and wrapping it in an python function simply has no real purpose.
Ironically, such simple wrappings are usually considered bad form.
There *is* a third alternative, which works in this case, and which
should be closer in speed to id. I will leave you to do a speed test.
>>> class bang(list):
__hash__ = object.__hash__
>>> s=set()
>>> s.add(bang())
>>> s
{[]}
__eq__ = object.__eq__ should also work instead of the Python
implementation I gave in my response to another response.
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list