使用 timeit.Timer() 时如何传递函数的参数

2024-01-06

这是一个简单程序的概要

# some pre-defined constants
A = 1
B = 2

# function that does something critical
def foo(num1, num2):
    # do something

# main program.... do something to A and B
for i in range(20):
    # do something to A and B
    # and update A and B during each iteration

import timeit
t = timeit.Timer(stmt="foo(num1,num2)")  
print t.timeit(5)

我只是不断收到“全局名称 foo 未定义”...... 谁可以帮我这个事?谢谢!


这些函数可以使用参数timeit如果它们是使用闭包创建的,我们可以通过将它们包装在另一个函数中来添加此行为。

def foo(num1, num2):
    def _foo():
        # do something to num1 and num2
        pass
    return _foo

A = 1
B = 2

import timeit
t = timeit.Timer(foo(A,B))  
print(t.timeit(5))

或者更短,我们可以使用functools.partial https://docs.python.org/3/library/functools.html而不是显式的闭包声明

def foo(num1, num2):
    # do something to num1 and num2
    pass

A = 1
B = 2

import timeit, functools
t = timeit.Timer(functools.partial(foo, A, B)) 
print(t.timeit(5))

使用 lambda 进行编辑,谢谢@jupiterbjy

我们可以使用不带参数的 lambda 函数来代替 functools 库

def foo(num1, num2):
    # do something to num1 and num2
    pass

A = 1
B = 2

import timeit
t = timeit.Timer(lambda: foo(A, B)) 
print (t.timeit(5))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 timeit.Timer() 时如何传递函数的参数 的相关文章