1. 程式人生 > >模塊與包

模塊與包

文件 clas cal 12px ... log 綁定 運行 查看

一:模塊

一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴。

模塊分類有:1:內建模塊,python‘自帶’的模塊,如os、sys

2:自定義模塊,自己寫的模塊

3:第三方模塊,別人寫好的模塊、如一些開源的庫

二:如何使用模塊

1:import spam

<1>:創建名稱空間,用來存放spam.py中定義的名字
<2>:基於剛剛創建的名稱空間來執行spam.py
<3>:創建名字spam指向該名稱空間,spam.名字操作,都是以spam.py為準

def
read1(): 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 的方式

模塊與包