2015-08-28 167 views
1

我已經做了一些研究,並且遇到以下文章:http://effbot.org/zone/import-confusion.htm。雖然這似乎是一個很好的指導,但它在1999年寫了一段時間。我正在使用Python 3.4.3,所以我想有些事情已經改變了,這讓我很擔心,因爲我不想了解什麼是不適用的。因此,在Python 3中,詳細介紹所有導入包和模塊的方法?哪些方法最常用,應該用於其他方面?在Python中導入模塊的所有方法是什麼?

回答

3

事關普通用法是在該網頁上列出的前三種方式的唯一途徑:

  • 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模塊)中的各種功能。這些導入函數的精確級別各不相同,但對於「我只想導入該模塊並使用它」的普通用法,您基本上不需要使用它們。只有當你想要做一些動作導入名稱在運行時才知道的模塊時才需要它們。

+0

@Miles - 關於相對導入的更多信息可以在下面找到:http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python –

+0

@BrenBarn好吧,這是有道理的。但是,我有一個特殊的問題。我有一個包含兩個模塊的包。我在包之外還有另一個模塊,並試圖訪問包內的兩個模塊內部的函數。在我當前模塊的頂部,我鍵入'import package_name',但我仍然無法訪問子模塊中的函數。我究竟做錯了什麼? –

+0

@MilesDavis:你應該在這個網站上搜索類似的問題。如果你沒有找到答案,你應該問一個單獨的問題,解釋你的問題的細節。你在這裏問了一個非常普遍的問題。如果您在特定設置中遇到特定問題,則需要另外提出問題。 – BrenBarn

2

的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! 

因此給出的簡單,明顯的方法是:importMODULE_NAME它保留命名空間,我建議,雖然有幾個導入方法作爲你可以從python3 manual entry看到,你可以通過覆蓋__import__()方法或通過滾動你自己來擴展它們,我會說堅持它,直到你有一個理由不

__import__()被雙下劃線包圍的事實也是一個暗示。

如果您希望瞭解導入機制背後的設計決策,然後從手冊開始,然後進入PEP 302 & 420是很好的起點。

0

我們可以通過以下方式

  • import module
  • from module import function
  • from module import *

雖然使用from module import * 是不是一個好的做法在Python導入,因爲模塊,讀能力:其他程序員無法理解當前模塊中實際使用的是什麼。 內存過載:全部加載到內存中。 Best practices for using import in a module.

相關問題