說,我只需要使用的findAll()從重新模塊,是它更有效地做到:使用「進口<module>」或「從<module>進口<func>」更高效嗎?
from re import findall
或
import re
是否有實際速度/內存使用情況等有什麼區別?
說,我只需要使用的findAll()從重新模塊,是它更有效地做到:使用「進口<module>」或「從<module>進口<func>」更高效嗎?
from re import findall
或
import re
是否有實際速度/內存使用情況等有什麼區別?
導入沒有什麼區別,但是在訪問方面有一些細微差別。
當您訪問功能
re.findall()
蟒蛇將需要首先找到在全球範圍內的模塊,然後找到的findall模塊字典。如果你在一個循環內調用它幾千次,可能會有所作爲。
+1,但也要注意,Python將在全局名稱空間之前搜索本地名稱空間,因此創建引用該函數的本地函數(findall = re.findall)是最好的,並且與兩種導入樣式的工作方式相同。 – Tom 2008-12-06 21:20:55
除了導入後在本地名稱空間中可見的re的名稱,沒有區別。
有疑問時,時間是:
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
似乎是大約兩倍的速度執行。不過,據推測,執行導入的代碼是你的瓶頸,而不是實際的導入。
你什麼時候打算導入100萬次? – hop 2008-12-07 03:51:45
不成熟的優化是邪惡的。請提供一些具體的東西來優化。毛毯「更有效」如果沒有特定的代碼來衡量,問題就毫無意義。 – 2008-12-07 14:15:53