python中的包與模組

2021-10-07 06:57:37 字數 2899 閱讀 6542

模組:為了使**更容易維護,提高**重用價值;可以將一組相關功能的**寫入乙個單獨的.py檔案中。供別人匯入使用。這個.py檔案就被稱作是乙個模組。

模組的匯入

import module1, module2

或import module1

import module2

匯入模組後,模組中的方法或者類可以通過 模組名.方法() 直接呼叫

import time

time.time()

當我們使用 import 語句匯入模組時,python直譯器首先會去內建命名空間中尋找,即判斷匯入的模組是不是內建模組,然後再去 sys.path 列表中定義的路徑從前往後尋找 .py檔案

重新命名模組

在匯入模組的時候還可以對模組進行重新命名,以方便使用;若是當前檔案中存在同名的方法或變數,也可以通過這種方式避免衝突~

import datetime as date

date.datetime.now()

from import

from modname import name1[, name2[, ... namen]]

import語句的匯入會新建乙個命名空間,將模組中的名稱存放在該命名空間中,而 'from modname import name1, name2' 則會將name1 和 name2 單個匯入到當前的命名空間中。既然是匯入到當前的命名空間中,那就可以直接拿來使用,前面不需要再新增模組名稱。

from datetime import datetime

print(datetime.now())    # 不需要寫成 datetime.datetime.now()

包(package)

python中的包(package)就是乙個目錄,裡面存放了 .py檔案,外加乙個 __init__.py。通過目錄的方式來組織眾多的模組,包就是用來管理和分類模組的。引入包之後,還有乙個好處就是 同名的模組可以放在不同的包下,以避免名稱衝突

init.py 檔案的作用

在每乙個包目錄下,都應該有乙個 __init__.py 檔案,若這個檔案不存在,那麼這個目錄只是乙個目錄而不是乙個包。__init__.py 檔案可以是空檔案,也可以有 python **,原則是盡量保持 __init__.py 檔案的精簡

匯入包的語句如下:

import package 

# 或引入包下的某乙個模組

from package import module

import package 或者 from package import module 都會執行package 包下的 __init__ 檔案

現在有如下目錄結構:

├─root                               

│ ├─pk_1

│ │ ├─__init__.py

│ │ ├─m1.py

│ ├─pk_2

│ │ ├─__init__.py

│ │ └─m2.py

│ ├─__init__.py

│ ├─test.py

pk_1 和 pk_2 包中的 __init__.py 檔案都為空,root包下的 test.py 想要使用 pk_1 包下 m1模組中的方法,可以使用如下語句:

from pk_1 import m1

m1.fun_1()        # fun_1() 為m1模組中的方法

但是使用如下語句,就會丟擲異常:

from pk_1 import *

m1.fun_1()

# 異常資訊:

nameerror: name 'm1' is not defined

##############################

import pk_1

pk_1.m1.fun_1()

# 異常資訊:

attributeerror: module 'pk_1' has no attribute 'm1'

這時候可以在 pk_1 包中的__init__.py 中 進行 包提公升(在包中提公升匯入許可權),pk_1 包的 __init__.py 檔案內容如下:

from pk_1.m1 import fun_1

然後在 test.py 檔案中可以直接通過包名引入方法:

# 1)

from pk_1 import fun_1 # 或 from pk_1 import *

fun_1()

# 2)

import pk_1

pk_1.fun_1()

這個就是 包中 __init__.py 檔案存在的意義,可以將相關的匯入語句 或 提公升匯入許可權的語句 寫在 __init__.py檔案中,這樣使用者就不需要了解包中的內部結構,可以直接通過包名 呼叫該包(package)中某個模組的方法~

還可以在 包中 __init__.py 檔案中使用 __all__ 列出需要匯入的模組,例如在 pk_2 包中的 __init__.py檔案中新增 __all__ 變數:

__all__ = ['m2']

然後在 test.py 檔案中就可以使用 from pk_2 import * 一次性匯入 __all__變數中列出的模組:

from pk_2 import *

m2.fun_2()

若是 pk_2 包的 __init__.py 檔案已經對 fun_2 方法做了提公升:

# pk_2 包的 \_\_init\_\_.py 內容

from pk_2.m2 import fun_2

這樣在 test.py 中 import * 後可直接使用該方法:

from pk_2 import *

fun_2()

注意:當 __init__.py 中定義了 __all__ 變數時,import * 只會匯入 __all__中列出的模組

python中模組與包

模組與包 在實際專案中,的行數可能上萬,甚至上幾十萬,不可能在乙個頁面內完成,需要多個程式設計師通力寫作 張三,李四,王五。每天收集大家的 做乙個版本,類似樂高積木一樣,每個人負責一部分,最後搭建成乙個完整的專案 import time 載入乙個模組的語句 time.sleep 0.1 import...

Python中的模組與包

在import模組的時候,python是通過系統路徑找到這些模組的,我們可以將這些路徑列印出來 pprint.pprint sys.path library python 2.7 site packages pip 1.4.1 py2.7.egg library python 2.7 site pa...

python的包與模組

這是一篇python小白關於包與模組的粗淺認知,用以加深理解。如有錯誤,請各位前輩多多指教 什麼是包與模組 在python中,我們可以把包與模組理解為資料夾與檔案,但僅僅是這樣理解,包與資料夾的區別就是包下會有乙個 init py 檔案 稍後我們對其進行一段解釋。而模組中還包括有 類,變數,函式等元...