一.模塊介紹
1.什麼是模塊
2.模塊的四種通用類別
- 使用 Python 寫的
.py
文件, 例 : 文件名 test.py
, 模塊名爲 test
- 盛放有多個
py
文件的文件夾也是一個功能的集合體, 至關於一種超級模塊, 稱之爲包
- 已被編譯爲共享庫或DLL的C或C++擴展
- 使用
C
編寫並連接到 Python 解釋器的內置模塊
3.模塊的三種來源
-
自帶的模塊
- 內置模塊
- 標準庫
-
第三方模塊
- 能夠經過 pip 工具下載的別人寫的一些優秀的模塊
- 例 :
pip3 install requests
-
自定義模塊
4.爲什麼要使用模塊
- 使用自帶或第三方模塊 : 寫好的功能拿來就用, 提高開發效率
- 使用自定義模塊 : 減小代碼冗餘, 讓程序的組織結構更清晰
3.模塊導入示例
⛅"spam.py" 文件
print("i am spam") # 只要執行此文件就會打印 "i am spam"
x = 1000
def aaa():
print("i am spam.aaa")
def bbb():
print("i am spam.bbb")
aaa()
def change():
global x
x = 0
⛅"run.py" 執行文件
import spam # 導入模塊先執行一次被導入模塊文件, 會打印 "i am spam"
import spam # 以後的導入都是直接引用第一次導入的結果, 不會重複執行文件
import spam
x = 2000 # 當前執行文件下的變量 "x"
spam.aaa() # 使用模塊的 "aaa" 功能, 打印 "i am spam.aaa"
spam.bbb() # 使用模塊的 "bbb" 功能, 打印 "i am spam.bbb" 並調用模塊的 "aaa" 打印 "i am spam.aaa"
spam.change() # 使用了模塊的 "change" 功能,改變的是定義階段就規定好了的去 "spam" 名稱空間找變量名 "x"
print(x) # 因此這裏打印的仍是 "run.py" 的 "x" : 2000
print(spam.x) # 而 "spam.py" 裏面的 "x" : 0
二.模塊使用之 import
1.首次導入模塊發生的三件事
- 建立一個模塊的名稱空間
- 執行模塊對應文件, 將執行文件產生的名字存放於這個名稱空間中
- 在當前執行文件中拿到一個模塊名, 該模塊名指向被導入模塊的名稱空間
![模塊導入](http://static.javashuo.com/static/loading.gif)
2.import 的使用
- 強調 : 只有首次導入纔會執行被導入模塊文件, 並建立一個名稱空間
- 以後的導入都是直接引用首次導入的結果
- 模塊中功能的執行始終以模塊本身的名稱空間爲準
import spam
import spam
import spam
import spam
import spam
print(spam) # <module 'spam' from 'F:\\Pycharm File\\spam.py'>
spam.aaa()
3.import 的優缺點
- 優勢 : 知名道姓的引用某個模塊的名字, 不會有衝突
- 缺點 : 須要加前綴, 引用次數多的時候就比較麻煩
4.爲模塊起別名
import spam as ss
import songhaixing as shawn
5.導入多個模塊
⛅不推薦使用
import os, sys, time
⛅推薦使用(清晰明瞭)
import os
import sys
import time
⛅導入模塊規範
1. Python內置模塊
2. 第三方模塊
3. 自定義模塊
import os
import sys
import 第三方
import spam
三.模塊使用之 from...import...
1.首次導入模塊發生三件事
- 建立一個模塊的名稱空間
- 執行對應文件, 將產生的名字存放於剛建立的名稱空間中 (前兩個步驟與 import 同樣)
- 在當前名稱空間中拿到模塊中的名字, 能夠直接使用, 不用加任何前綴
2.from...import 的使用
- 同 import同樣,執行模塊中的功能,始終以模塊的名稱空間爲準
from spam import aaa, bbb, change
print(aaa)
aaa()
bbb() #能夠直接調用
change() #不須要調用名字
3.from...import 的優缺點
- 優勢 : 不用加前綴, 直接引用模塊中的名字, 代碼更精簡
- 缺點 : 容易與當前執行文件名稱空間中的重複名字發生衝突
4.爲模塊取別名
from spam import change as ch
print(ch)
ch()
5.導入多個模塊功能
from...improt * # "*" 表明全部
from spam import *
aaa()
bbb()
change()
⛅好比在 "spam.py" 文件中加入
__all__=["aaa","change"]
⛅那麼在另外一個文件中導入這個文件就只能使用這兩個規定的名字