New submission from Dennis Sweeney <sweeney.dennis...@gmail.com>:

## Below are my benchmarks for this change.

from operator import itemgetter, attrgetter
from pyperf import Runner

class MyClass:
    __slots__ = "a", "b"

namespace = {'itemgetter': itemgetter,
             'attrgetter': attrgetter,
             'MyClass': MyClass,
             }

runner = Runner()
runner.timeit(
    name="itemgetter",
    setup="f = itemgetter(1); x = (1, 2, 3)",
    stmt="f(x)",
    globals=namespace
)
runner.timeit(
    name="attrgetter",
    setup="f = attrgetter('b'); x = MyClass(); x.a = x.b = 1",
    stmt="f(x)",
    globals=namespace
)

##### Results #####
# itemgetter: Mean +- std dev: [operator_main] 45.3 ns +- 1.3 ns -> 
[operator_vec] 29.5 ns +- 0.7 ns: 1.54x faster
# attrgetter: Mean +- std dev: [operator_main] 61.6 ns +- 1.7 ns -> 
[operator_vec] 43.8 ns +- 0.9 ns: 1.41x faster

----------
components: Library (Lib)
messages: 399900
nosy: Dennis Sweeney
priority: normal
severity: normal
status: open
title: Add vectorcall on operator.itemgetter and attrgetter objects
type: performance
versions: Python 3.11

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue44953>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to