我的Python成長之路---Day17--模組基本使用
1 什麼是模組? 模組就是一系統功能的集合體,在python中,一個py檔案就是一個模組,比如module.py,其中模組名module
2.模組的分類:
2.1.自定義模組 * (第三方模組也屬於自定義 它是別的程式設計師寫的 ) 關注如何自定義
2.2.內建模組 是c語言寫的 然後連線到python直譯器中 例如 time模組 關注如何使用
2.3.已經編譯為DLL c或c++ *** 不需要知道怎麼來的 會用就行 2.4.包 ***** 包實際上是包含一堆模組的資料夾之後詳細講
對於這四種模組 它們的使用方式 是一致的
3.為什麼要用模組
3.1減少編寫重複程式碼,很多有現成的程式碼 直接拿來使⽤用
3.2.從⽂檔案界別組織程式碼 是我們的程式碼結構更更加清晰4.怎麼用模組
使用關鍵字來匯入模組:import+模組名 進行匯入
4.1 模組的使用之import 匯入模組
首次匯入模組發生三件事 1、建立一個模組的名稱空間 2、執行模組對應檔案,將產生的名字存放於第一步建立的名稱空間中 3、在當前執行檔案中拿到一個模組名,該模組名指向1的名稱空間
匯入模組時:簡單來說就是得到了一個名稱,這個名稱指向被匯入檔案,有了這個名稱就可以通過這個名稱就找到被匯入檔案中的所有名稱,即可以獲得模組中的所有名稱進而可以進行呼叫
x=1 def f1(): pass
import spam強調:之後的匯入會直接引用第一次匯入的結果,不會重複執行檔案
import spam import spam import spam import spam import spam 在這裡多次進行匯入不會多次重複執行檔案,後邊的匯入會直接引用第一次匯入的結果
print(spam) 列印spam的話會出現關於模組spam的資訊:<module 'spam' from 'E:\\Python 資料\\上海一期視訊\\day14\\day14\\spam.py'>
print(spam.money) 列印spam紅money的值 spam.read1() 呼叫模組中的read1函式的功能
模組中功能的執行始終以模組自己的名稱空間為準
也可以說:執行檔案與被匯入檔案的名稱空間互相獨立 read1=111111 print(spam.read1) 結果:<function read1 at 0x0000023F2036A950>
這裡即使定義了一個read1,但是隻要是呼叫spam中的read1,它始終是模組中的read1函式
money=1111111111111 spam.read1() 結果:spam模組.read1: 1000 不會因為在執行檔案中定義了一個新的money而改變
read1=11111111111111111111111111 spam.read2() 結果:spam模組.read2: spam模組.read1: 1000 (read2中呼叫了read1)
money=1111111111111111 spam.change() 這裡呼叫了spam模組中的change函式,change函式在spam模組中對money的值進行了修改 print(money) 這裡列印的是執行檔案中的money,列印結果為執行檔案中定義的money=1111111111111111 spam.read1() 因為上面已經呼叫change對spam中的money修改,所以這裡呼叫read1之後打印出來的monry值是被change修改過後 的值money=0
5.import語句的其他語法
5.1為模組起別名 (語法:import xxx as x 作用:簡化書寫)
import spam as sm
print(sm.money)
sm.read1()
engine=input('>>: ').strip()
if engine == 'mysql':
import mysql as db
elif engine == 'oracle':
import oracle as db
db.parse()
5.2一行匯入多個模組(不推薦使用)(語法:import spam,mysql,oracle 作用:簡化書寫) import spam,mysql,oracle
推薦寫成多行 import spam import mysql import orcacle
6.模組的使用之from...import...匯入模組
首次匯入模組發生三件事 1、建立一個模組的名稱空間 2、執行模組對應檔案,將產生的名字存放於1中的名稱空間 提示:from...import...與import前兩件事一模一樣 3、在當前名稱空間中直接拿到模組中的名字,可以直接使用,不用加任何字首
import spam # spam.名字
from spam import money,read1,read2,change
print(money) 這裡可以直接打印出來spam中money的值
read1() 可以直接使用spam中函式功能,不需要加字首
read2()
change() 在這裡呼叫change時,修改的還是spam中money的值
print(money) 如果在這裡列印money打印出來的還是使用from..import..匯入進來的money=1000
import spam 使用import呼叫spam時,直接列印money列印的可執行檔案中的money,不能列印spam中
print(money) money的值,當可執行檔案中沒有定義money時,程式會進行報錯
注意: 1、同import,執行模組中的功能,始終以模組的名稱空間為準 money=1111111111 change() print(money)
2、from ... import 名字,拿到的名字可以不加字首直接使用,使用起來更加方便 當問題是容易與當前執行檔案中相同的名字衝突 money=1111111111111111 print(money) read1=1111111 read1()
6.1起別名(語法:from xxx import xxx as x ) from spam import money as m print(m)
6.2在一行匯入多個(語法:from xxx import xxx,xx) from spam import money,read1,read2
6.3匯入所有:(語法:from ... import * ) 將模組中的所有名稱全部拿到當前執行檔案的名稱空間中 from spam import *
print(money) money=1000 print(read1) 輸出:<function read1 at 0x0000026A377DA950> print(read2) 輸出:<function read2 at 0x0000026A377DAA60> print(change) 輸出:<function change at 0x0000026A377DAB70>
全部匯入時也是可控的:
__all__=['money','read1'] # from .. import *可以通過__all__來控制使用全部匯入時匯入的名稱,允許匯入的名稱放到列表中
from spam import * print(money) print(read1) print(read2)
7.py檔案的兩種執行方式 * 1.作為執行檔案 (右鍵run) 執行檔案就是當前正在編輯的py檔案,右鍵即可執行 2.作為模組被匯入 編輯完成的時,如果其他py檔案需要已完成py檔案中的功能時,py檔案可以作為模組被匯入
__name__ 這個名稱 可以獲取當前執行狀態 如果__name__打印出來的結果是__main__ 說明當前檔案是執行檔案 否則 說明是作為模組 於是乎有了以下程式碼 if __name__ == "__main__": print("作為執行檔案") else: print("作為模組匯入了")
8.模組的查詢順序是:1>>2>>3 1、記憶體中已經載入的模組 2、內建模組 3、sys.path路徑中包含的模組