week5:模組
一、模組的概念
1.1 好處:
提高了程式碼的可維護性,其次,編寫程式碼不必從0開始,當一個模組編寫完畢,就可以被其他地方引用。我們在編寫程式的時候,也經常引用其他模組,包括python內建的模組和來自第三方的模組。
1.2 模組有3種:
python標準庫:(而標準庫,指的是你安裝Python程式(直譯器)後,在安裝目錄裡存在模組),參考:http://www.liujiangblog.com/course/python/51
第三方模組:(Python內建的標準庫之外的所有模組都稱為第三方模組)
應用程式自定義模組:(.py檔案就是一個模組)
1.3 模組呼叫函式的方法
bin.py
#第1種方法
# import sys
# import calculate #直譯器通過搜尋路徑找到calculate.py後,將calculate=calculate.py all ccode
#
# print(calculate.add(1, 2))
# print(calculate.sub(2, 1))
#
# #print(a) #name 'a' is not defined
# print(calculate.a) #3
#
# print(sys.path) #搜尋路徑
##第2種方法 # import calculate, sys # print(calculate.add(1, 2)) # print(calculate.sub(2, 1)) # # #print(a) #name 'a' is not defined # print(calculate.a) #3 # # print(sys.path) #搜尋路徑
##第3種方法
# from calculate import add, sub##只需要從模組種呼叫某幾個函式,不需要編譯完
# print(add(1, 4))
# print(sub(3, 6))
##第4種方法把所有的函式都搞過來,儘量不用
# from calculate import *
# print(add(1, 2))
# print(a)
##第5種方法 改名字
#from calculate import add as plus
calculate.py
print('ok') a = 3 def add(x, y): return x+y def sub(x, y): return x-y
bin.py和calculate.py 在同一個包下面
二、包(package)
paython新建種,有directory(目錄,資料夾),paython package(裡面有init.py檔案)。
模組是用來組織函式的,包是用來組織模組的。
##包呼叫模組的方法
# from web import logger
# logger.logger()
#如果多加一層
# from web.web2 import logger
# logger.logger()
##如果直接呼叫函式
# from web.web2.logger import logger
# logger()
三、__file__
bin.py
from module import main
main.main()
logger.py
def logging():
print('logging')
main.py
import logger
def manin():
logger.logging()
對bin.py進行執行,結果錯誤。把main.py改為
from moudle import logger
def main():
logger.logging()
對bin.py進行執行,結果為logging,但是有隱藏錯誤。python自己做了一件事情,把bain.py改為
from module import main
main.main()
import sys
print(sys.path)
執行結果多了一個地址, 'C:\\Users\\asus\\PycharmProjects\\ATM',python自己加上的,才能保證程式的正確執行。
驗證:找到bin檔案地址,複製到終端(cmd)
在cmd執行 是錯誤的
解決問題:新增絕對路徑
import sys
sys.path.append('C:\\Users\\asus\\PycharmProjects\\ATM')
from module import main
main.main()
在pychrm cmd執行成功
但是這種方法有侷限性,傳到別的計算機,就不能執行了。因此把絕對路徑改為相對路徑。
import sys
sys.path.append('C:\\Users\\asus\\PycharmProjects\\ATM')
from module import main
main.main()
print(__file__)
在pychrm cmd執行,輸出結果為:C:/Users/asus/PycharmProjects/ATM/bin/bin.py
把bin.py改為
import sys
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
# sys.path.append('C:\\Users\\asus\\PycharmProjects\\ATM')
from module import main
main.main()
print(__file__)
#print(os.path.abspath(__file__))
#print(os.path.dirname(os.path.abspath(__file__)))
#print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# sys.path.append(BASE_DIR)
這樣在cmd pycharm 執行結果都是一樣為logging,且可以在其他計算機上執行
四 、__name__
bin.py
import foo
foo.hello() ##hello
foo.py
def hello():
print('hello')
#hello()
#print(__name__)
if __name__=='__main__':
hello()
bin.py和foo.py 在同一個包下面
五、軟體目錄結構規範
5.1、"設計專案目錄結構"的原因:
(1)可讀性高: 不熟悉這個專案的程式碼的人,一眼就能看懂目錄結構,知道程式啟動指令碼是哪個,測試目錄在哪兒,配置檔案在哪兒等等。從而非常快速的瞭解這個專案。
(2)可維護性高: 定義好組織規則後,維護者就能很明確地知道,新增的哪個檔案和程式碼應該放在什麼目錄之下。這個好處是,隨著時間的推移,程式碼/配置的規模增加,專案結構不會混亂,仍然能夠組織良好。
5.2、舉例
5.3、應用