Python基礎-模塊和包

Python基礎-模塊(module)和包(package)

1.模塊

出現原因:開發過程中程序代碼越來越多,如果直接放在一個文件愛你,代碼會越來越長,造成代碼不易維護。

爲了編寫方便,維護代碼,可以把不同功能的代碼保存在不同的文件裏。這樣,每個文件包含的代碼量就會比較少,方便維護

定義:

Python 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和Python語句。

模塊讓你能夠有邏輯地組織你的 Python 代碼段。在Python中,一個.py文件就可以稱之爲一個模塊

即:

  • 包含相應功能的函數以及變量,py則以.py爲擴展名
  • 模塊可以爲其他程序引用,以使用該模塊所對應的函數或者變量
  • 使用模塊的優點:
  • 提高代碼的可維護性
  • 提高代碼的複用性
  • 可以導入很多功能的模塊
    • 標準庫模塊
    • 第三方模塊
    • 自定義模塊
  • 避免變量名重複(作用域)

Python中導入模塊的常用方式

  • import 模塊名稱
 import module[,module1[,module2]]
   #調用其中函數時使用 module.funcation的形式
  • import 模塊名稱 as 新名稱
import module as name
  • from 模塊名稱 import 函數名
from module import funcation
#from module import * 爲引入module的全部內容

區別:

  • import 模塊名稱和 import 模塊名稱 as 新名稱

    • 會導入整個模塊
    • 如果需要使用某個函數名,必須以‘模塊名稱.函數名()’來使用(這種方法跟有利於程序代碼可讀性(優先推薦))
  • import 模塊名稱 as 新名稱 ,重新命名導入模塊 通常使模塊名稱簡潔,方便使用

  • from 模塊名稱 import 函數名

    • 只導入某一函數,而不是一整個模塊
    • 可以直接通過函數名稱去調用,無需在函數名稱前加模塊名稱
    • 調用很多模塊,可能會有名稱衝突(不推薦使用)

2.包

定義:

  • 包是一個分層次的文件目錄結構,它定義了一個由模塊及子包,和子包下的子包等組成的 Python 的應用環境。簡單來說,包就是文件夾,但該文件夾下必須存在 __init__ 文件, 該文件的內容可以爲空。__init__.py 用於標識當前文件夾是一個包。。

  • 目的:

    • 將文件/模塊通過文件夾組織起來
    • 不是爲了運行,而是爲了導入使用,其本質仍是模塊
    • 可以更加便捷的對代碼進行功能管理
  • 注意:

    • Python3,即使包中沒有_init_.py也可以使用,而Py2會報錯
    • 用import導入帶點的,點的最左邊一定是一個包名
    • import導入時,其名稱空間的名字源於文件,導入包的本質是導入_init_.py文件

一個例子

demo:

下面是一個包的結構圖

➜  school tree
.
├── api
│   ├── __init__.py
│   ├── students.py
│   └── versions.py
├── cmd
│   ├── __init__.py
│   └── manage.py
├── db
│   ├── __init__.py
│   └── models.py
└── __init__.py

import school
school.api.students.get()   	#報錯  import  school並未導入school下的子模塊中

#1.在school下的__init__.py添加 
from . import api     			#在當前目錄下導入api模塊
#2.然後在 api下的__init__.py 添加
from . import students  		#在api模塊導入students模塊
#3.然後再執行
import school
school.api.students.get() 

#小結:在school包下的__init__.py內導入包的子包
#同時在子包的__init__導入子包的子模塊
#就可以在導入school模塊時同時導入相關的子模塊

  • from … import 時 import後的模塊,必須是一個不包含’.‘的,否則報錯

在school/api/versions.py中導入school/cmd/manage.py

在 school/api/versions.py
from school.cmd import manage    				#絕對導入
manage.main()

from ..(當前目錄上一層)cmd import manage          #相對導入

__all__的用法

公開聲明瞭暴露接口:

格式:

__all__(a,b,c...,n)   #可以爲模塊或者函數
#在__init__中只要有__all__(),那麼調用與之匹配的模塊時,只能使用在__all__中的函數或者模塊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章