假设我只需要使用 re 模块中的 findall() ,这样做是否更有效:
from re import findall
或者
import re
速度/内存使用等实际上有什么区别吗?
导入没有区别,但访问权限略有不同。
当您访问该功能时
re.findall()
python需要先在全局范围内找到模块,然后在modules dict中找到findall。如果您在循环中调用它数千次,可能会有所不同。
如有疑问,请计时:
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
似乎执行速度大约是原来的两倍。不过,据推测,导入代码的执行是您的瓶颈,而不是实际的导入。
没有区别,除了导入后在本地命名空间中可以看到 re 中的哪些名称。