Передача функции (с аргументами) в качестве аргумента в Python - PullRequest
0 голосов
/ 05 апреля 2020

Я измеряю производительность различных методов сортировки, используя Python встроенную библиотеку timeit . Я хотел бы передать функцию и целое число в качестве аргументов для оператора, проверяемого в timeit () . Я попробовал следующее:

def sort_1(l):
    ...
    return l_sorted

def test(f: Callable, l_len: int):
    l = np.random.rand(low=-1000, high=1000, size=l_len)
    f(l)


timeit.timeit(stmt=test(sort_1, l_len=10), number=1000)

... с ошибкой ValueError, говорящей, что stmt не является ни строкой, ни вызываемой. Ошибка не возникает, когда я называю это так:

timeit.timeit(stmt=test, number=1000)

... но тогда я не могу передать аргумент test () . Каково общее решение, если кто-то хочет передать аргументы функции, заданной в качестве аргумента? (скажем, когда метод уже реализован и нет способа передать аргументы в отдельный аргумент)

Приветствия

Редактировать:

@ jonrsharpe, спасибо! Решение выглядит так:

timeit.timeit(stmt='test(f=sort_1, l_len=10)', number=100, globals=globals())
...