5

文档中的示例

def test():
    """Stupid test function"""
    L = []
    for i in range(100):
        L.append(i)

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test"))

但是如何调用带参数的函数,例如这样的函数:

def test(some_object):
    """Stupid test function"""
    L = []
    for i in range(100):
        L.append(some_object)
4

3 回答 3

8

错误,如果我的问题是正确的,那么您只是在寻找那个吗?

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"))
于 2013-06-04T18:14:26.050 回答
2

这是在这种确切情况下对我有用的一种解决方案,只要您的论点不是巨大的矩阵或类似的东西。


假设我想用我在主函数内部初始化的值来测试一个函数 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")

作为最后的警告,您必须考虑到您的参数将通过 str() 格式,这可能会导致它们失去各种精度和完整性。如果您使用此方法,请检查您的输入!

于 2014-05-14T00:16:43.053 回答
0

你想使用:

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()
于 2013-06-04T18:14:28.523 回答