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

python:timeit和传递参数的语法问题,python,big-o,timeit,Python,Big O,Timeit,我想测试下面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

我想测试下面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
的范围),在这里打印它不会有任何区别。

“不会产生任何东西”-真的吗?!我希望
NameError:name'I'没有定义
,这为您提供了一个很好的问题线索。以后,请提供比“不产生任何东西”更详细的信息。好的。伙计们,我用的是PyCharm python控制台,它没有产生任何效果。。我只是试着在终端上运行它,看到了错误。@Martjin Pieters我运行了测试,在我看来,算法是二次的,请查看编辑。是吗?@olala:是的,它是二次的,因为你运行外部循环N次,内部循环再运行N次。