Created originally on Bitbucket by Devin Jeanpierre
Changesets for this Pull Request have not been imported, because it had been already declined on Bitbucket. Marked as closed by the import user.
e.g. code that does "if type(x) is operator.attrgetter:" now works. (I'm sorry.)
Tested with stupid benchmarks and there is no significant difference. e.g.:
(in pypy/module/operator):
$ pypy -m timeit -s 'import operator; a = operator.attrgetter("real"); items = range(10000)' 'for x in items: a(x)'
10000 loops, best of 3: 71.7 usec per loop
$ pypy -m timeit -s 'import app_operator as operator; a = operator.attrgetter("real"); items = range(10000)' 'for x in items: a(x)'
10000 loops, best of 3: 66.7 usec per loop
$ pypy -m timeit -s 'import app_operator as operator; a = operator.attrgetter("real"); item = 1' 'a(1)'
100000000 loops, best of 3: 0.0073 usec per loop
$ pypy -m timeit -s 'import operator; a = operator.attrgetter("real"); item = 1' 'a(1)'
100000000 loops, best of 3: 0.00694 usec per loop
$ pypy -m timeit -s 'import app_operator as operator; a = operator.attrgetter("real.real"); items = range(10000)' 'for x in items: a(x)'
1000 loops, best of 3: 501 usec per loop
$ pypy -m timeit -s 'import operator; a = operator.attrgetter("real.real"); items = range(10000)' 'for x in items: a(x)'
1000 loops, best of 3: 504 usec per loop
$ pypy -m timeit -s 'import operator; a = operator.attrgetter("real.real", "real"); items = range(10000)' 'for x in items: a(x)'
1000 loops, best of 3: 1.74 msec per loop
$ pypy -m timeit -s 'import app_operator as operator; a = operator.attrgetter("real.real", "real"); items = range(10000)' 'for x in items: a(x)'
1000 loops, best of 3: 1.82 msec per loop