import 初探 匯入 Package

2021-08-30 04:59:15 字數 2069 閱讀 8746

眾所周知,import 也許是 python 中最平淡無奇、最道貌岸然的東西了。它總是用一種呆滯木然的眼神看著身懷絕技的道友們玩出各種花招、翻雲覆雨,卻從來是不動聲色……這卻越來越像是乙個陰謀了!

曾經,我也在江湖上聽說過 import,它似乎是 python 的基本語句,用於匯入包(package),或者模組(module)到當前的作用域裡來,這樣我們就可以在程式中呼叫這些包和模組了。好象還真沒見它做過什麼出格的事情來呢。

通常模組是字尾為 ".py"、".pyo"、".pyc"、".pyd"、".so"、".dll" 這樣的檔案。啊哈,匯入模組還是挺簡單的,就連我這種初學者都爛熟於心咯。只是那個 package……

包通常總是乙個目錄,目錄下為首的乙個檔案便是 __init__.py。然後是一些模組檔案和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。差不多就像這樣吧:

package1/ __init__.py

module1.py

module2.py

package2/ __init__.py

module1.py

module2.py

我們可以就這樣匯入乙個包:

import

package1

或者調入乙個子模組和子包:

from

package1 import

module1from

package1 import

package2import

packag1.module1import

packag1.package2

可以深入好幾層包結構:

from

package1.package2 import

module1import

package1.package2.module1

大致就這樣吧,我覺得,包的精髓應該是在 __init__.py 這個檔案之中的。

__init__.py 檔案

__init__.py 控制著包的匯入行為。假如 __init__.py 為空,那麼僅僅匯入包是什麼都做不了的。

>>>

import

package1>>>

package1.module1traceback (most recent call last):

file "", line 1, in ?

package1.module1

attributeerror: 'module' object has no attribute 'module1'

我們需要在 __init__.py 裡把 module1 預先匯入:

#檔案 __init__.py

import

module1

測試:

>>>

import

package1>>>

package1.module1

__init__.py 中還有乙個重要的變數,叫做 __all__。我們有時會使出一招「全部匯入」,也就是這樣:

from

package1 import

*

這時 import 就會把註冊在包 __init__.py 檔案中 __all__ 列表中的子模組和子包匯入到當前作用域中來。比如:

#檔案 __init__.py

__all__ = ['module1'

, 'module2'

, 'package2'

]

測試:

>>>

from

package1 import

*>>>

module2

__init__.py 檔案會在匯入時被執行。

import匯入模組

使用import 匯入模組時,系統做了以下幾步 1.匯入import後面緊跟的模組 2.將後面的名字指向該模組 例如 import os 系統先是匯入了os.py檔案,然後將os指向了os.py檔案,然後就可以用os.函式名來訪問os.py裡面的函式和屬性 使用import匯入模組有幾種方式 1.i...

import 匯入模組

import 匯入模組 import md 首先建立兩個資料夾 乙個run.py 第二個叫md.py md.py 這個檔案存的是 print from the md py def readl print md money def readl2 print md模組 readl def change ...

import匯入和from匯入

1.import匯入和from匯入 1.import匯入和from匯入可變型別和不可變型別有著本質的區別 2.import是用來匯入模組,from是用來匯入模組中的物件 3.from匯入和import匯入 當指向的變數是可變型別的話,可以共享全域性變數,如果是不可變 型別,from匯入就無法全域性共...