gpt4 book ai didi

Python - 及时克服导入

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:11 25 4
gpt4 key购买 nike

我最近注意到关于 timeit python 模块的以下内容:

在我的机器上:

from timeit import Timer
t = Timer(stmt='a = 2**3**4')
print("This took {:.3f}s to execute.".format(t.timeit()))

将产生:

This took 0.017s to execute.

另一方面写一个文件test.py:

#!/usr/bin/env python3

a = 2**3**4

并调用:

from timeit import Timer
t = Timer(stmt='import test')
print("This took {:.3f}s to execute.".format(t.timeit()))

将产生:

This took 0.126s to execute.

我想知道如何在不更改文件本身的情况下测试 test.py 的执行时间。我怎样才能解决导入文件的问题(因此会浪费时间)。

最佳答案

你的测量有一个问题,当你写的时候,你没有测量你认为你正在测量的东西:

t = Timer(stmt= 'a = 2**3**4')

您正在测量绑定(bind)时间!看:

>>> Timer(stmt='a = 10**5**4').timeit(100000)
0.0064544077574026915
>>> Timer(stmt='a = 2**3**4').timeit(100000)
0.006511381058487586

时间几乎相同,但计算 10**5**42**3**4 要长一些。 2**3**4 仅在编译代码时计算一次,这称为“常量折叠”,Python 在源代码编译期间执行的一些优化。

比较这两个结果:

>>> Timer(stmt= 'a = 2**3**4').timeit(100000) 
0.00628656749199763
>>> Timer(stmt= 'a = x**y**z', setup='(x,y,z)=(2,3,4)').timeit(100000)
0.18055968312580717

但是这个加速不是白给的。有两点:

  1. 编译时间增加
  2. .pyc 文件大小增加(因为这个值存储在 .pyc 文件中)

假设我有两个文件:

#foo1.py
a = 10**7**7

#foo2.py
x,y,z =(10,7,7)
a = x**y**z

如果我用 python -m py_compile foo1.py foo2.py 编译它们,我机器上的 .pyc 文件的大小将是:

  1. foo1.cpython-36.pyc - 364 882 字节
  2. foo2.cpython-36.pyc - 150 字节

关于Python - 及时克服导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47875858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com