通常:乙個模組就是乙個包含了python定義和宣告的檔案(檔名就是模組名字加上.py的字尾),模組可以被匯入使用。
但import載入的模組分為四個通用類別:
1.使用python編寫的.py檔案
2.已被編譯為共享庫或dll的c或c++擴充套件
3.把一系列模組組織到一起的資料夾(注:資料夾下有乙個__init__.py檔案,改資料夾稱之為包)
4.使用c編寫並鏈結到python直譯器的內建模組
為什麼使用模組:
1.如果你退出python直譯器然後重新進入,那麼你之前定義的函式或者變數都將丟失,因此我們通常將程式寫到檔案中以便永久儲存下來,需要時就通過python test.py方式去執行,此時test.py被稱為指令碼script
2.隨著程式的發展,功能越來越多,為了方便管理,我們通常將程式分成乙個個的檔案,這樣做程式的結構更清晰,方便管理。這時我們不僅僅可以把這些檔案當做指令碼去執行,還可以把他們當做模組來匯入到其他的模組中,實現了功能的重複利用
#import匯入檔案都做了哪些事
#1.為原始檔建立新的名詞空間
#2.在新建的命名空間中執行模組中包含的**
#3.建立名字來引用該命名空間
#為模組起別名
engine_type='
mysql
'if engine_type=='
mysql':
import
mysql as engine
elif engine_type=='
oracle':
import
oracle as engine
engine.parse()
#在一行匯入多個模組
import spam,time
from spam import money使用from...import...則是將spam中的名字直接匯入到當前的命名空間中,所以在當前命名空間中,直接使用名字就可以了、無需加字首:spam.from span import *
# * 先找模組檔案下的 __all__=['','']
#如果有__all__就使用__all__中的可被呼叫物件,否則模組內物件都可被使用
直接從sys.module中刪除乙個模組不就可以解除安裝了嗎,注意了,刪了sys.module中的模組物件仍然可能被其他程式的元件所引用,因而不會被清楚。
特別的對於我們引用了這個模組中的乙個類,用這個類產生了很多物件,因而這些物件都有關於這個模組的引用。
如果只是想互動測試的乙個模組,使用import importlib; importlib.reload(modulename),這只能用於測試環境
print(__name__) #檔案當做指令碼執行,該值等於__main__;檔案spam.py當做模組被匯入時,該值被當做spam
if__name__=='
__main__':
read1()
read2()
change()
##官方解釋模組的查詢順序:記憶體已經載入的模組->內建模組->sys.path路徑中包含的模組
import
sys#將模組的位址放在環境變數裡
'c:\users\htz\pycharmprojects\s19\day5\a')
import
mfrom a import m
packages are a way of structuring python』s module namespace by using 「dotted module names」
包是一種通過使用『.模組名』來組織python模組命名空間的方式
#具體:包就是乙個包含有__init__.py檔案的資料夾,所以建立包的目的是將檔案/模組組織起來
#強調:
1. 在python3中,即使包下沒有__init__.py檔案,import 包仍然不會報錯,而在python2中,包下一定要有該檔案,否則import 包報錯
2. 建立包的目的不是為了執行,而是被匯入使用,記住,包只是模組的一種形式而已,包的本質就是一種模組
#注意事項:
1.關於包相關的匯入語句也分為import和from ... import ...兩種,但是無論哪種,無論在什麼位置,在匯入時都必須遵循乙個原則:凡是在匯入時帶點的,點的左邊都必須是乙個包,否則非法。可以帶有一連串的點,如item.subitem.subsubitem,但都必須遵循這個原則。但對於匯入後,在使用時就沒有這種限制了,點的左邊可以是包,模組,函式,類(它們都可以用點的方式呼叫自己的屬性)。
2、import匯入檔案時,產生命名空間中的名字**於檔案,import 包,產生的命名空間的名字同樣**於檔案,即包下的__init__.py,匯入包本質就是在匯入該檔案
#匯入包實際上就是在匯入包下面的__init__.py檔案
import
aaa#
點的左邊必須是包,from...import...後面必須是乙個明確的名字
from aaa.m1 import f1
from aaa import bbb
from aaa.bbb.m3 import f3
#相對匯入: '.'當前檔案;'..'上級檔案
設定環境變數的乙個方法(django)
__file__))))
Python之模組與包
a 在 python 中,乙個.py檔案就稱之為乙個模組 module 大大提高了 的可維護性 編寫 不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用 b 呼叫函式時用import a getpass模組提供了可移植的密碼輸入 import getpass getpass.getpass b ...
Python之模組與包
模組匯入過程 0.先判斷sys.modules字典中檢視模組是否已經存在,如存在則不做任何操作 1.從sys.path路徑下找到模組 2.建立模組的命名空間 3.把檔案中的名字都放到這個命名空間裡 import sys print sys.path import modue1 import只匯入一次...
python之模組與包
包是一種通過使用模組名來組織python模組命名空間的方式 無論是import形式還是from.import形式,凡是在匯入語句中 而不是在使用時 遇到帶點的,都要第一時間提高警覺 這是關於包才有的匯入語法 包的本質就是乙個包含 init py檔案的目錄 凡是在匯入時帶點的,點的左邊都必須是乙個包 ...