21
A
回答
30
Python模塊不會導入多次。只需運行兩次導入不會重新加載模塊。如果你想重新加載,你必須使用reload
聲明。這裏有一個演示
foo.py
與單線
print "I am being imported"
模塊,這裏是多個進口嘗試的屏幕成績單。
>>> import foo
Hello, I am being imported
>>> import foo # Will not print the statement
>>> reload(foo) # Will print it again
Hello, I am being imported
13
導入緩存,只能運行一次。其他導入只會花費sys.modules
中的查找時間。
9
在其他的答案中指定,的Python遇到第二個import語句它時,一般不重新加載的模塊。相反,它會從sys.modules
返回其緩存版本,而不執行任何代碼。
但是有幾個陷阱值得注意:
導入主模塊作爲一個普通的模塊有效地創建不同的名字在同一模塊的兩個實例。
這是因爲程序啓動期間the main module is set up with the name
__main__
。因此,將其作爲普通模塊導入時,Python在sys.modules
中未檢測到它,並再次導入它,但第二次輸入它的專有名稱。考慮文件/tmp/a.py具有以下內容:
# /tmp/a.py import sys print "%s executing as %s, recognized as %s in sys.modules" % (__file__, __name__, sys.modules[__name__]) import b
另一個文件/tmp/b.py有a.py一個import語句(
import a
)。
執行/tmp/a.py結果如下輸出:[email protected]:/tmp$ python a.py a.py executing as __main__, recognized as <module '__main__' from 'a.py'> in sys.modules /tmp/a.pyc executing as a, recognized as <module 'a' from '/tmp/a.pyc'> in sys.modules
因此,最好是保持主模塊相當小,且大部分的功能輸出到外部模塊,如建議here 。
This answer指定兩個可能的方案:
- 稍有不同的import語句使用不同的條目
sys.path
導致同一模塊。 - 嘗試在前一個模塊中途失敗後再次導入模塊。
- 稍有不同的import語句使用不同的條目
相關問題
- 1. 如何防止導入模塊「導入」sys.argv [1:]
- 2. Python模塊:如何防止導入新模塊調用的模塊
- 3. 如何防止在Curses導航菜單中輸入兩次?
- 4. 導入時間模塊兩次
- 5. python模塊是否被導入兩次?
- 6. 如何防止鼻子檢查像matplotlib導入模塊?
- 7. 如何防止從我的模塊導入功能?
- 8. 如何防止裝飾者在TypeScript中導入節點模塊?
- 9. IronPython - 如何防止導入CLR(和其他模塊)
- 10. 如何在python2.7中防止導入(並獲取模塊,而不是模塊)
- 11. 如何用webpack依次導入模塊?
- 12. 導入模塊多次
- 13. 如何防止依賴包括兩次
- 14. 如何防止Datagridview CellValidating發射兩次?
- 15. 如何防止SwiftSupport庫兩次
- 16. 如何防止程序加載兩次?
- 17. 如何防止打開文件兩次?
- 18. 如何防止div可見兩次?
- 19. 什麼可能導致python模塊導入兩次?
- 20. 如何防止模塊複製與MEF?
- 21. 如何防止多次繪製模態?
- 22. 防止源加載兩次
- 23. 防止Ajax調用兩次
- 24. 如何防止將值推入數組兩次? (jQuery)
- 25. 如何防止Python模式自動插入「導入」?
- 26. 如何導入模塊?
- 27. 如何導入模塊
- 28. 如何防止hbm2ddl導入init sqls?
- 29. 如何防止重複導入圖像?
- 30. 導入導入主模塊的模塊
請注意,'重載()'不會修復了舊模塊的任何引用,所以實際上不是那麼有用。 – 2010-01-08 17:56:07
這是一個重要的觀點。謝謝。 – 2010-01-08 18:01:01
參考資料:http://docs.python.org/tutorial/modules.html#more-on-modules。 http://docs.python.org/reference/simple_stmts.html#the-import-statement – 2010-01-08 20:39:30