模塊與包
一:模塊
一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴。
模塊分類有:1:內建模塊,python‘自帶’的模塊,如os、sys
2:自定義模塊,自己寫的模塊
3:第三方模塊,別人寫好的模塊、如一些開源的庫
二:如何使用模塊
1:import spam
<1>:創建名稱空間,用來存放spam.py中定義的名字 <2>:基於剛剛創建的名稱空間來執行spam.py <3>:創建名字spam指向該名稱空間,spam.名字操作,都是以spam.py為準 defread1(): print("test read1") money=12344 spam.read1() spam.read2() print(spam.money) #這個money是尋找的spam內的money print(money) #這個是尋找自己下的money spam.change() print(spam.money) from spam import money,read1,read2 money==100000 print(money) read1() read2()
文件名spam.py,模塊名spam
#spam.py
print(‘from the spam.py‘)
money=1000
def read1():
print(‘spam->read1->money‘,money)
def read2():
print(‘spam->read2 calling read‘)
read1()
def change():
global money
money=0
測試一:money與spam.money不沖突 import spam money=10 print(spam,money) 測試二:read1與spam.read1不沖突 import spam def read1(): print(‘---‘) spam.read1() 測試三:執行spam.change()操作的全局變量money仍然是spam中的 import spam money=1 spam.change() print(money)
總結:首次導入模塊spam時會做三件事:
1.為源文件(spam模塊)創建新的名稱空間,在spam中定義的函數和方法若是使用到了global時訪問的就是這個名稱空間。
2.在新創建的命名空間中執行模塊中包含的代碼,見初始導入import spam
3.創建名字spam來引用該命名空間
2:from...import...
python中的變量賦值不是一種存儲操作,而只是一種綁定關系 from spam import money,read1 money=100 #將當前位置的名字money綁定到了100 print(money) #打印當前的名字 read1() #讀取spam.py中的名字money,仍然為1000 from spam import*#將模塊spam中所有的名字都導入到當前名稱空間 print(money) print(read1) print(read2) print(change) import os # 導入os模塊 from os import listdir # 從os模塊中導入listdir對象 from os import listdir, path, getcwd # 從os模塊中導入listdir、path、getwcd (多個) from os import getcwd as pwd # 從os模塊中getcwd別名為pwd from sys import * # 從sys模塊中導出所有對象
把模塊當成腳本來執行
我們可以通過模塊的全局變量__name__來查看模塊名:
當做腳本運行:
__name__ 等於‘__main__‘
當做模塊導入:
__name__=
作用:用來控制.py文件在不同的應用場景下執行不同的邏輯
if __name__ == ‘__main__‘:
二:包
1:包是從文件夾級別組織模塊
無論是import形式還是from...import形式,凡是在導入語句中(而不是在使用時)遇到帶點的,都要第一時間提高警覺:這是關於包才有的導入語法
2:絕對導入和相對導入
<1>: 絕對導入
以頂點的包為起點, 逐層獲取導入內容
<2>:相對導入
. 表示當前文件所在的路徑
.. 表示當前文件所在的路徑的上一層路徑
相對導入只能使用from .. import 的方式
模塊與包