Python 模塊

一、什麼是模塊

    模塊就是一組功能的集合體,模塊組織形式有以下幾種

        1、一個python文件是一個模塊,文件名是module.py,模塊名則是module(自定義模塊的常見格式)

        2、 已被編譯爲共享庫或DLL的C或C++擴展

        3、使用C編寫並鏈接到python解釋器的內置模塊

   4、把一系列模塊組織到一起的文件夾(注:文件夾下有一個__init__.py文件,該文件夾稱之爲包)


二、爲什麼要用模塊

    1、可以將程序中頻繁用來的一些公共的功能組織到一個文件中,從而減少代冗餘

    2、直接使用內置或者第三方的模塊中的功能,這種拿來主義可以提升開發效率


三、如何用模塊

    導入模塊的方式:

    import sudada                              #導入一個模塊sudada(在當前目錄下)

    from sudada import xx            #導入一個模塊sudada,只使用模塊內的xx這個變量

    from sudada.X.X import  xx as rename    #導入多個模塊,並給這些模塊定義一個別名

    from sudada.X.X import  *       #導入多個模塊,使用模塊內所有的變量(*代表所有)

    

    模塊導入需要注意的點:

    導入多個相同的模塊,只會執行一次

 

    模塊路徑:查看當前文件所在的絕對路徑

import sys
print(sys.path)

>>['C:\\Users\\stsud\\Desktop\\Pycharm文檔', 'C:\\Users\\stsud\\Desktop\\Pycharm文檔', 'C:\\Install Path\\Python3.6\\python36.zip', 'C:\\Install Path\\Python3.6\\DLLs', 'C:\\Install Path\\Python3.6\\lib', 'C:\\Install Path\\Python3.6', 'C:\\Install Path\\Python3.6\\lib\\site-packages', 'C:\\Install Path\\Python3.6\\lib\\site-packages\\pip-10.0.1-py3.6.egg', 'C:\\Install Path\\Pycharm-破解版\\PyCharm 2018.1\\helpers\\pycharm_matplotlib_backend']


四、模塊的導入與調用

    4.1 import 方式   

    首次導入模塊:

    1.會產生一個模塊的名稱空間

    2.會執行模塊文件的代碼,將產生的名字放到模塊的名稱空間中

    3.會在當前名稱空間中拿到一個模塊名,該模塊名執行模塊的名稱空間

import parm  # 導入模塊parm
print(parm.money)  # 引用parm模塊中的money時,不能直接寫變量名(直接寫money找到的是當前文件內的變量money),需要在變量名前加模塊名(parm.money)

import parm as sm  # 導入模塊指定一個別名爲sm,那麼引用這個別名sm即可
print(sm.money)

import parm, sudada, ssp  #引用多個模塊,中間用逗號隔開

    優點:指名道姓的訪問模塊名稱空間的名字,不會與當前名稱空間的名字衝突

    缺點:每次引用模塊時都需要加模塊名前綴


    4.2 from ... import ... 方式

    首次導入模塊:

    1.會產生一個模塊的名稱空間

    2.會執行模塊文件的代碼,將產生的名字放到模塊的名稱空間中

    3.會在當前名稱空間中直接拿到一個模塊名稱空間的名字

強調:來自於模塊名稱空間內的函數,調用該函數時一定是已模塊的名稱空間爲準的

from parm import money    #導入模塊parm中的money
print(money)

from parm import money,read1,read2    #導入模塊parm中的money,read1,read2,用逗號分開
print(money)
print(read1)
print(read2)

from parm import money as sm   #導入模塊parm中的money並給money定義別名爲sm
print(sm)


    導入模塊內所有的名字

from parm import *    #導入模塊parm中的所有名稱空間的名字(*表示所有),不推薦使用
print(money)
print(read1)
print(read2)


    自定義導入模塊內所有的名字

    1.在模塊內(文件的開頭)寫一個內置變量"__all__=['名稱1','名稱2']"

__all__=['money','read1']

    2.那麼當使用from parm import *時,*號表示的就是moneyread1這2個變量了

from parm import *
print(money)
print(read1)

    優點:導入方便

    缺點:在使用模塊內的名稱時容易與當前文件內的變量值混淆


五、一個Python文件當做腳本使用時,和當做模塊使用時的區別

    5.1、使用內置函數"__name__"來區分python文件是當做腳本單獨使用還是被當做模塊使用

    在python文件中定義"print(__name__)",當這個python文件被當做腳本執行時,返回值爲"__main__"

print(__name__)

>> __main__  #運行python文件時,返回值爲"__main__"表示當前文件爲python腳本文件

    當這個python文件被當做模塊引用時,返回值爲"模塊名"

import parm

# parm   #被當做模塊引用時,"print(__name__)"返回值爲"模塊名稱"


    5.2、區分python文件的用途

    1.通常在python文件末尾加上條件判斷,定義這個python的用途(當做模塊還是腳本文件)

if __name__ == '__main__':
    money
    read1()
    read2()

六、模塊的搜索路徑

    6.1、查找模塊的順序

    內存-->內置-->sys.path

    查看當前模塊所在的路徑:sys模塊

import sys
print(sys.path)

>>['C:\\Users\\stsud\\Desktop\\Pycharm文檔', 'C:\\Users\\stsud\\Desktop\\Pycharm文檔', 'C:\\Install Path\\Python3.6\\python36.zip', 'C:\\Install Path\\Python3.6\\DLLs', 'C:\\Install Path\\Python3.6\\lib', 'C:\\Install Path\\Python3.6', 'C:\\Install Path\\Python3.6\\lib\\site-packages', 'C:\\Install Path\\Python3.6\\lib\\site-packages\\pip-10.0.1-py3.6.egg', 'C:\\Install Path\\Pycharm-破解版\\PyCharm 2018.1\\helpers\\pycharm_matplotlib_backend']
    sys.path的值是以當前執行文件爲準(sys.path的值爲當前文件所在的目錄)


    6.2、當一個python文件導入另外一個python文件時,並且2個文件都不在同一目錄,那麼就需要導入全局路徑:

import sys
sys.path.append(r'C:\Users\stsud\Desktop\Pycharm文檔\ATM-1\core')  #指定目標文件所在的路徑


    6.3、查看當前文件所在的路徑(使用OS模塊)

import os

print(os.path.abspath(__file__))   #使用內置參數"os.path.abspath(__file__)",即可得到當前文件所在的目錄位置
>>C:\Users\stsud\Desktop\Pycharm文檔\ATM-1\bin\start.py

print(os.path.dirname(os.path.abspath(__file__)))    #使用內置參數"os.path.dirname()",即可得到當前文件的上一級目錄
>>C:\Users\stsud\Desktop\Pycharm文檔\ATM-1\bin

print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  #使用2次內置參數"os.path.dirname()",即可得到當前文件的上上一級目錄
>>C:\Users\stsud\Desktop\Pycharm文檔\ATM-1


七、軟件開發的目錄規範

    7.1、導入不同目錄的python模塊

import sys
import os

BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   #BASE_DIR就是整個項目的根目錄
sys.path.append(BASE_DIR)                                              #把定義的根目錄追加到"sys.path"裏面

#測試:
print(BASE_DIR)   
>>C:\Users\stsud\Desktop\Pycharm文檔\ATM-1
print(sys.path)
>>['C:\\Users\\stsud\\Desktop\\Pycharm文檔\\ATM-1\\bin', 'C:\\Users\\stsud\\Desktop\\Pycharm文檔', 'C:\\Install Path\\Python3.6\\python36.zip', 'C:\\Install Path\\Python3.6\\DLLs', 'C:\\Install Path\\Python3.6\\lib', 'C:\\Install Path\\Python3.6', 'C:\\Install Path\\Python3.6\\lib\\site-packages', 'C:\\Install Path\\Python3.6\\lib\\site-packages\\pip-10.0.1-py3.6.egg', 'C:\\Install Path\\Pycharm-破解版\\PyCharm 2018.1\\helpers\\pycharm_matplotlib_backend', 'C:\\Users\\stsud\\Desktop\\Pycharm文檔\\ATM-1']

from core import src           #使用from導入core目錄下的src模塊
if __name__ == '__main__':     #條件判斷python文件是腳本使用還是當做模塊使用
    src.run()                  #運行src模塊下的函數run() 

    #只要把"BASE_DIR"也就是整個項目的根目錄導入到"sys.path"裏面去之後,那麼在當前根目錄下的其他python文件在導入某一個模塊時,只需要 "from 目錄名 import 模塊名"就可以了。


    7.2、導入非python文件類型的文件

import os

BASE_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   #DB_PATH是項目的根目錄
DB_PATH=os.path.join(BASE_PATH,'db','db.txt')   #os.path.join後面接db.txt文件對應的目錄結構

print(DB_PATH)
>>C:\Users\stsud\Desktop\Pycharm文檔\ATM\db\db.txt   #最終拿到文件所在的路徑







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章