7

假设我只需要使用 re 模块中的 findall() ,这样做是否更有效:

from re import findall

或者

import re

速度/内存使用等实际上有什么区别吗?

4

3 回答 3

14

导入没有区别,但访问权限略有不同。

当您访问该功能时

re.findall() 

python需要先在全局范围内找到模块,然后在modules dict中找到findall。如果您在循环中调用它数千次,可能会有所不同。

于 2008-12-06T20:45:37.740 回答
12

如有疑问,请计时:

from timeit import Timer

print Timer("""re.findall(r"\d+", "fg12f 1414 21af 144")""", "import re").timeit()
print Timer("""findall(r"\d+", "fg12f 1414 21af 144")""", "from re import findall").timeit()

我得到以下结果,使用至少 5 次重复 10,000,000 次调用:

re.findall(): 123.444600105
findall(): 122.056155205

直接使用findall()而不是re.findall().

但是,实际导入语句的速度差异很大。在我的电脑上,我得到以下结果:

>>> Timer("import re").timeit()
2.39156508446
>>> Timer("from re import findall").timeit()
4.41387701035

所以import re似乎执行速度大约是原来的两倍。不过,据推测,导入代码的执行是您的瓶颈,而不是实际的导入。

于 2008-12-06T23:20:18.913 回答
3

没有区别,除了导入后在本地命名空间中可以看到 re 中的哪些名称。

于 2008-12-06T20:35:50.647 回答