導入import的多種形式


參考資料:anaconda官方資料

 

 

 

一、module(模塊)

比如fibo是個模塊(.py文件),其中有fib、fib2等函數

第一種形式:import fibo

在當前的符號表中,這並不會直接進入到定義在 fibo 函數內的名稱;它只是進入到模塊名 fibo 中。你可以用模塊名訪問這些函數:

fibo.fib(1000)
fibo.fib2(100)
如果你想經常使用某個函數,你可以把它賦值給一個局部變量:
fib = fibo.fib
fib(500)

第二種形式:from fibo import fib, fib2

這並不會把被調模塊名引入到局部變量表里(因此在這個例子里,fibo 是未被定義的)。

fib(500)

第三種形式:from fibo import *

可以導入模塊內定義的所有名稱。這會調入所有非以下划線(_)開頭的名稱。 在多數情況下,Python程序員都不會使用這個功能,因為它在解釋器中引入了一組未知的名稱,而它們很可能會覆蓋一些你已經定義過的東西。

fib(500)

第四種形式:import fibo as fib

如果模塊名稱之后帶有 as,則跟在 as 之后的名稱將直接綁定到所導入的模塊。這會和 import fibo 方式一樣有效地調入模塊, 唯一的區別是它以 fib 的名稱存在的。

import fibo as fib
fib.fib(500)

第五種形式:from fibo import fib as fibonacci

 

注解:出於效率的考慮,每個模塊在每個解釋器會話中只被導入一次。因此,如果你更改了你的模塊,則必須重新啟動解釋器, 或者,如果它只是一個要交互式地測試的模塊,請使用 importlib.reload(),例如 import importlib; importlib.reload(modulename)

二、library(包)

比如有如下的包結構:

 

 

第一種形式:import sound.effects.echo

這會加載子模塊 sound.effects.echo 。但引用它時必須使用它的全名。

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

第二種形式:from sound.effects import echo

這也會加載子模塊 echo ,並使其在沒有包前綴的情況下可用,因此可以按如下方式使用:

echo.echofilter(input, output, delay=0.7, atten=4)

第三種形式:直接導入所需的函數或變量:from sound.effects.echo import echofilter

這也會加載子模塊 echo,但這會使其函數 echofilter() 直接可用:

echofilter(input, output, delay=0.7, atten=4)

第四種形式:從包中導入 *

當用戶寫 from sound.effects import * 會發生什么?理想情況下,人們希望這會以某種方式傳遞給文件系統,找到包中存在哪些子模塊,並將它們全部導入。這可能需要很長時間,導入子模塊可能會產生不必要的副作用,這種副作用只有在顯式導入子模塊時才會發生。

 

請注意,當使用 from package import item 時,item可以是包的子模塊(或子包),也可以是包中定義的其他名稱,如函數,類或變量。 import 語句首先測試是否在包中定義了item;如果沒有,它假定它是一個模塊並嘗試加載它。如果找不到它,則引發 ImportError 異常。

雖然某些模塊被設計為在使用 import * 時只導出遵循某些模式的名稱,但在生產代碼中它仍然被認為是不好的做法。

請記住,使用 from package import specific_submodule 沒有任何問題! 實際上,除非導入的模塊需要使用來自不同包的同名子模塊,否則這是推薦的表示法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM