gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:43:40 26 4
gpt4 key购买 nike

这是一个简单程序的大纲

# 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而不是显式的闭包声明

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))

关于python - 使用 timeit.Timer() 时如何传递函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5086430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com