python: timeit 和传递参数的语法问题

python: syntax issue with timeit and passing arguments

我想测试下面的 test1(n) 函数的 Big-O 性能,所以我尝试使用 timeit 来查看性能。但是,现在的代码不会产生任何东西......

我认为问题出在 t1 = timeit.Timer 行中,参数未传递到 test1(n) 函数中。我不知道如何解决它。有什么帮助吗?谢谢!

def test1(n):
    for i in range(n):
        for j in range(n):
            k = 2 + 2


if __name__ == '__main__':
    import timeit

    for i in range(1000000, 100000001, 1000000):
        t1 = timeit.Timer("test1(i)", setup="from __main__ import test1")
        x = list(range(i))
        tm = t1.timeit(number=1000)
        print x
        print("%15.5f" % tm)

编辑:

所以结果是二次的 O(n^2)?

您还需要导入 i

t1 = timeit.Timer("test1(i)", setup="from __main__ import test1, i")

被测试语句中使用的每个名称都必须显式导入。定时代码未触及名称 x(绑定到 i 的范围),打印它不会有任何区别。