python--->包

1、什麼是包

包是模塊的一種形式,包的本質就是一個含有.py的文件的文件夾設計

2、爲甚麼要有包

模塊的第一個版本只有10個功能,可是將來在擴展版本的時候,模塊名和用法應該最好不要去修改,可是這只是對使用者友好,而因爲版本擴展,文件愈來愈大,模塊的設計者對模塊的管理、維護會愈來愈複雜,所以咱們能夠是哦那個包來擴展模塊的功能。code

3、如何用包

3.1 模塊和包

導入模塊時發生的三件事情:blog

  1. 建立一個包的名稱空間
  2. 執行py文件,將執行過程當中產生的名字存放於名稱空間中。
  3. 在當前執行文件中拿到一個名字aaa。aaa是指向包的名稱空間。

導入包發生的三件事情:it

  1. 建立一個包的名稱空間
  2. 因爲包是一個文件夾,沒法執行包,所以執行包下的.py文件,將執行過程當中產生的名字存放在包名稱空間內(即包名稱空間中存放的名字都是來自.py)
  3. 在當前執行的文件中拿到一個名字aaa,aaa是指向包的名稱空間的

導入包就是在導入包下的.py文件,而且可使用下面的倆種方式導入。class

  1. import
  2. from ...import...

3.2擴展模塊功能

65包-目錄結構.jpg?x-oss-process=style/watermark

以下咱們若是須要擴展aaa.py模塊,須要創建一個aaa的目錄文件,而且刪除aaa.py文件,將aaa.py修改爲m1.py和m2.py兩個文件,讓模塊的功能使用方法不改變。import

3.3修改__init__.py文件

因爲在__init__.py中定義了func1,所以咱們能夠在run.py文件中導入func1,可是這個func1並非咱們想要的func1,所以須要修改__init__.py文件,又因爲執行文件run.py的環境變量不爲aaa,所以直接使用import導入m1會報錯,所以使用from導入。變量

from aaa.m1 import func1
from aaa.m2 import func2

3.4 導入包內包

aaa.bbb指向aaa內部的文件夾bbb包,若是咱們須要導入bbb這個包。擴展

# bbb/.py

from aaa import bbb
# run.py

import aaa


print(aaa.bbb)

3.5 導入包內包的模塊

若是bbb包內部有m3.py,咱們須要從run.py導入m3模塊。語法

# bbb/.py

from aaa.bbb import m3
# run.py

import aaa


aaa.bbb.m3

3.6 絕對導入和相對導入

絕對導入:

# aaa/.py

from aaa.m1 import func1
from aaa.m2 import func2

相對導入:

  • .表明當前被導入文件所在的文件夾
  • ..表明當前被導入文件所在的文件夾的上一級
  • ...表明當前被導入文件所在的文件夾的上一級的上一級
from .m1 import func1
from .m2 import func2

4、注意事項

  1. 包內全部的文件都是被導入使用的,而不是被直接運行的
  2. 包內部模塊之間的導入可使用絕對導入(以包的根目錄爲基準)與相對導入(以當前被導入的模塊所在的目錄爲基準),推薦使用相對導入
  3. 當文件是執行文件時,沒法在該文件內用相對導入的語法,只有在文件時被看成模塊導入時,該文件內才能使用相對導入的語法
  4. 凡是在導入時帶點的,點的左邊都必須是一個包,import aaa.bbb.m3.f3錯誤
相關文章
相關標籤/搜索