我已經做了一些研究,並且遇到以下文章:http://effbot.org/zone/import-confusion.htm。雖然這似乎是一個很好的指導,但它在1999年寫了一段時間。我正在使用Python 3.4.3,所以我想有些事情已經改變了,這讓我很擔心,因爲我不想了解什麼是不適用的。因此,在Python 3中,詳細介紹所有導入包和模塊的方法?哪些方法最常用,應該用於其他方面?在Python中導入模塊的所有方法是什麼?
回答
的我喜歡Python的一切事情之一有一個設計
事關普通用法是在該網頁上列出的前三種方式的唯一途徑:
import module
from module import this, that, tother
from module import *
這些在Python並沒有改變3(有些在哪裏Python將在module.py
文件加載module
細節已經過調整,但是當你在頁面上描述本身仍然有效的進口行爲鏈接。)
在Python 3之前,但自那篇文章以來,已經添加了一件事。這是明確的相對進口。這些讓你做像from ..module import blah
這樣的事情。這種導入只能在包中使用;它允許包中的模塊以相對於包的方式引用相同包中的其他模塊(即,不必指定如何導入頂層包)。您可以閱讀PEP 328中的詳細信息。但是,即使如此,基本上只是鏈接到的頁面上提到的from module import blah
樣式語法的新變體。
__import__
也仍然在Python 3中工作。這是一個內部函數,只有在做一些非常不尋常的事時才需要使用。這同樣適用於importlib
模塊(以及不推薦使用的imp
模塊)中的各種功能。這些導入函數的精確級別各不相同,但對於「我只想導入該模塊並使用它」的普通用法,您基本上不需要使用它們。只有當你想要做一些動作導入名稱在運行時才知道的模塊時才需要它們。
@Miles - 關於相對導入的更多信息可以在下面找到:http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python –
@BrenBarn好吧,這是有道理的。但是,我有一個特殊的問題。我有一個包含兩個模塊的包。我在包之外還有另一個模塊,並試圖訪問包內的兩個模塊內部的函數。在我當前模塊的頂部,我鍵入'import package_name',但我仍然無法訪問子模塊中的函數。我究竟做錯了什麼? –
@MilesDavis:你應該在這個網站上搜索類似的問題。如果你沒有找到答案,你應該問一個單獨的問題,解釋你的問題的細節。你在這裏問了一個非常普遍的問題。如果您在特定設置中遇到特定問題,則需要另外提出問題。 – BrenBarn
的Python禪給你一些提示:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
因此給出的簡單,明顯的方法是:import
MODULE_NAME和它保留命名空間,我建議,雖然有幾個導入方法作爲你可以從python3 manual entry看到,你可以通過覆蓋__import__()
方法或通過滾動你自己來擴展它們,我會說堅持它,直到你有一個好理由不。
__import__()
被雙下劃線包圍的事實也是一個暗示。
我們可以通過以下方式
import module
from module import function
from module import *
雖然使用
from module import *
是不是一個好的做法在Python導入,因爲模塊,讀能力:其他程序員無法理解當前模塊中實際使用的是什麼。 內存過載:全部加載到內存中。 Best practices for using import in a module.
- 1. Python是否將模塊路徑中的所有模塊導入?
- 2. 在Typescript中導入模塊的正確方法是什麼?
- 3. 導入整個模塊與從python模塊導入所需方法有什麼區別?
- 4. Python中導入模塊的最pythonic方式是什麼
- 5. Python導入模塊,所有導入另一個模塊是相同的
- 6. 爲什麼沒有在Python 3的'sys.modules'中導入的模塊?
- 7. 爲什麼導入python模塊不導入嵌套模塊?
- 8. 是否有可能在Python中的「導入模塊」中獲得「導入模塊」?
- 9. 什麼是導入模塊的正確方法javascript node.js
- 10. 這兩種導入javascript模塊的方法有什麼區別?
- 11. 這兩種在Python中導入模塊的方式有什麼區別?
- 12. 這種在Python中導入模塊的方法導致循環?
- 13. 在Python中使用「導入模塊」和「從模塊導入*」之間的最佳做法是什麼?哪種用法更有效率,爲什麼?
- 14. 在Python中導入模塊
- 15. python無法導入模塊
- 16. 什麼是Haskell語法來導入子目錄中的模塊?
- 17. 有什麼區別:導入模塊和從模塊導入模塊?
- 18. 什麼是導入打字稿中的模塊的方法,以及require js在模塊加載中的作用
- 19. 什麼是角模塊導入
- 20. 是否有可能使所有模塊隱式導入模塊?
- 21. 有導入Python模塊
- 22. 導入Django中的所有模塊
- 23. 導入目錄中的所有模塊
- 24. 檢查所有導入的Python模塊中的代碼更改
- 25. 無法從谷歌模塊中導入模塊搜索在python
- 26. 無法導入模塊sent2trash在Python
- 27. 無法導入模塊在Python
- 28. 在導入模塊和方法的名稱在Python
- 29. Python模塊導入*
- 30. Python模塊導入
雖然此鏈接當然是相關的,但您應該擴展您的答案以直接包含更多信息。 – Cyphase