genexp性能问题?

你好, 我发现这个奇怪: python -mtimeit" sum(in in in in xrange(3000))" 100循环,最佳3:5.04毫秒每循环 python -mtimeit"导入itertools; sum(itertools.imap(int,xrange(3000)))" 100循环,最佳3:3.6毫秒每循环 我认为这两个构造可以达到相同的速度. - - Giovanni Bajo

# 回答1

Giovanni Bajo写道: 提示:口译员有多少次必须查找名称" int" 和两个示例中的" L"?
# 回答2

Giovanni Bajo写道: 提示:口译员需要几次查找名称" int" 和两个示例中的" L"?
# 回答3

Giovanni Bajo写道: 我认为早期的约束是最好的,但是正如弗雷德里克·伦德(Fredrik Lundh)所说, int可以查找每个迭代,以解释放缓的速度. 以供参考: $ python -m timeit" sum(in in in xrange(3000))" 1000循环,最佳3:1.92毫秒 /循环 $ python -m timeit -s"来自itertools import imap"" sum(imap(int,,, Xrange(3000))) 1000循环,最佳3:1.17毫秒 /循环 您可以通过将int变成局部变量来剃光几%: $ python -m timeIt -s" int_ = int"" sum(in in sum(i)for xrange(3000))" 1000循环,最佳3:1.74毫秒 /循环 另一方面 大于符号查找的成本: $ python -m timeit -s" def square(i):返回i*i" - s"从itertools导入 imap"" sum(imap(square,xrange(3000)))"" 100循环,最佳3:2.25毫秒每循环 $ python -m timeit" sum(i*i for i in xrange(3000))" 1000循环,最佳3:1.29毫秒 /循环 彼得
# 回答4

弗雷德里克·伦德(Fredrik Lundh)写道:提示:口译员在两个示例中必须查找" int"和" l"的次数? 啊,对,谢谢! - - Giovanni Bajo

标签: python

添加新评论