1. 程式人生 > >python模組呼叫方法總結

python模組呼叫方法總結

python有三種匯入模組的方法

感謝原作者Allenw
原文地址
其一,

import modname: 模組是指一個可以互動使用,或者從另一Python 程式訪問的程式碼段。只要匯入了一個模組,就可以引用它的任何公共的函式、類或屬性。模組可以通過這種方法來使用其它模組的功能。

用import語句匯入模組,就在當前的名稱空間(namespace)建立了一個到該模組的引用.這種引用必須使用全稱,也就是說,當使用在被匯入模組中定義的函式時,必須包含模組的名字。所以不能只使用 funcname,而應該使用 modname.funcname

其二,

from modname import
funcname from modname import fa, fb, fc 或者 from modname import *

與第1種方法的區別:funcname 被直接匯入到本地名字空間去了,所以它可以直接使用,而不需要加上模組名的限定
* 表示,該模組的所有公共物件(public objects)都被匯入到 當前的名稱空間,也就是任何只要不是以”_”開始的東西都會被匯入。
modname沒有被定義,所以modname.funcname這種方式不起作用。並且,如果funcname如果已經被定義,它會被新版本(該匯入模組中的版本)所替代。如果funcname被改成指向其他物件,modname不能不會覺察到。
建議:

1)如果你要經常訪問模組的屬性和方法,且不想一遍又一遍地敲入模組名,使用 from module import
2)如果你想要有選擇地匯入某些屬性和方法,而不想要其它的,使用 from module import
3)如果模組包含的屬性和方法與你的某個模組同名,你必須使用import module來避免名字衝突
4)儘量少用 from module import * ,因為判定一個特殊的函式或屬性是從哪來的有些困難,並且會造成除錯和重構都更困難。

其三 ,
內建函式__import__()

除了前面兩種使用import關鍵字的方法以外,我們還可以使用內建函式 import

() 來匯入 module。兩者的區別是,import 後面跟的必須是一個型別(type),而import() 的引數是一個字串,這個字串可能來自配置檔案,也可能是某個表示式計算結果。例如
mymodule = import (’module_name’)
附註:
1)模組的內容都放在一個模組檔案中,如 mymodule 的內容應該放在PYTHONPATH 目錄下的一個mymodule.py中,C實現的除外
2)包可以將幾個模組名稱空間組織起來, 如A.b 就表示在包A中的一個子模組b
可以單獨匯入某一個子模組,如Python文件中給出的例子
import sound.effects.echo
這樣必須使用全稱對裡面的物件進行引用,如
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
還可以使用下面的語句來載入echo子模組
from Sound.Effects import echo
它在沒有包字首的情況下也可以使用, 所以它可以如下方式呼叫:
echo.echofilter(input, output, delay=0.7, atten=4)
不主張從一個包或模組中用import * 匯入所有模組,因為這樣的通常會導致可讀性很差。
from Package import specific_submodule的用法並沒有錯,實際上這還是推薦的用法,除非匯入的模組需要使用其它包中的同名子模組(the importing module needs to use submodules with the same name from different packages).
綜上所述,一般情況應該使用import , 但有幾個例外
1)module文件告訴你要用from-import的
2)匯入一個包元件。需要一個包裡面的某個子模組,一般用from A.b import c比import A.b.c 更方便 且不會冒混淆的危險.