1. 程式人生 > >week5:模組

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、應用