Python 在带参数的函数中使用timeit模块
来自 但是如何使用参数调用函数,例如,这样的函数:Python 在带参数的函数中使用timeit模块,python,timeit,Python,Timeit,来自 但是如何使用参数调用函数,例如,这样的函数: def test(some_object): """Stupid test function""" L = [] for i in range(100): L.append(some_object) 呃,如果我没弄错你的问题,你只是在找那个 anobj = 42 # where it can be whatever object def test(foo): pass # do somethin
def test(some_object):
"""Stupid test function"""
L = []
for i in range(100):
L.append(some_object)
呃,如果我没弄错你的问题,你只是在找那个
anobj = 42 # where it can be whatever object
def test(foo):
pass # do something with foo
if __name__ == '__main__':
import timeit
print(timeit.timeit("test(anobj)", setup="from __main__ import test, anobj"))
您要使用:
def main():
import timeit
print(timeit.timeit("test(some_object)")) # don't need to use the 'setup'
def test(my_object):
lst = []
for i in range(100):
lst.append(my_object)
if __name__ == '__main__':
main()
这里有一个在这种情况下对我有效的解决方案,只要你们的论点不是巨大的矩阵或类似的东西
假设我想用我在主函数中初始化的值测试函数foo(a,b,c)。我可以在不更改代码的情况下调用以下内容
timeit.Timer('foo({},{},{})'.format(a,b,c), "from __main__ import foo")
如果参数是字符串,则必须在值周围重新引入引号:
timeit.Timer('foo("{}","{}","{}")'.format(a,b,c), "from __main__ import foo")
作为最后的警告,你必须考虑到你的参数将通过Stand()格式,这可能导致它们失去各种类型的精确性和完整性。如果使用此方法,请检查您的输入
同样的方式<代码>打印(timeit.timeit(“测试(5)”,setup=“从主导入测试”)。如果要使用在timeit代码之外定义的对象,则必须像导入其他对象一样导入该参数。timeit字符串只是普通的Python代码,一切正常。(我喜欢回答这个问题:-p)timeit.Timer('foo("{}","{}","{}")'.format(a,b,c), "from __main__ import foo")