一.子產品簡介
python開發中,每一個.py檔案都可以看作是一個子產品,子產品内部的函數或者方法可以被其他子產品調用,至于函數或者方法是具體如何實作的,調用者不需要關心。

假如項目中既含有UI也有邏輯代碼還有功能實作,如果全寫在一個py檔案,可能會有幾萬甚至十幾萬行代碼,顯得代碼很臃腫,為了友善代碼閱讀和維護,我們可以将項目拆分為多個子產品,不同的子產品實作不同的功能,這樣分工合作開發效率也高,而且就算出現bug也友善定位。
二.子產品分類
1.系統内置子產品
python中有一些内置子產品我們直接調用,比如:sys、time、json等,具體使用方法我們在調用子產品中詳細講解;
2.第三方開源子產品
安裝第三方開源子產品,可以直接cmd打開控制台或者打開pycharm終端運作 pip install <子產品名> 即可,前提是anacoanda已經安裝正确,例如:學習爬蟲的時候需要安裝request
pip install request
複制
3.自定義子產品
除了前面兩種子產品,我們也可以自己寫子產品來供自己調用,具體實作什麼功能有自己決定,在後面的子產品調用中會有詳細講解,值得注意的是:子產品名字不能和内置子產品名字一樣,會造成沖突;
三.調用子產品
使用 import關鍵字 導入子產品,并放置在代碼最開始位置;同一個子產品不管執行了多少次 import <子產品名>,實際上隻會被導入一次。
為了講解關于子產品的調用方法,假如我們有一個計算加減乘除的子產品檔案calculator.py,代碼如下:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解憂
@Blog(個人部落格位址): https://www.codersrc.com/
@File:calculator.py
@Time:2019/10/11 21:25
@Motto:不積跬步無以至千裡,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
# 定義一個全局變量
name = "calculator"
# 加法
def add(x,y):
return x+y
# 減法
def sub(x,y):
return x-y
# 乘法
def multiplication(x,y):
return x*y
# 除法
def division(x,y):
return x/y
# 使用内置函數eval計算表達式的結果,如果表達式有誤,直接抛異常
def get_result(input_str):
try:
return eval(input_str)
except Exception as e:
print("表達式輸入異常!")
return None
複制
如果已經忘記python 異常處理的小夥伴請參考: python 異常處理詳細講解
1.import <子產品名>
建立一個py檔案,用于調用模闆檔案 calculator.py 中的函數,代碼如下:
# 導入子產品
import calculator
# 調用calculator子產品中的add函數 : 子產品名.函數名 或者 子產品名.變量名
result = calculator.add(2,5)
print(result)
# 調用calculator子產品中的sub函數 : 子產品名.函數名 或者 子產品名.變量名
result = calculator.sub(2,5)
print(result)
# 調用calculator子產品中的multiplication函數 : 子產品名.函數名 或者 子產品名.變量名
result = calculator.multiplication(2,5)
print(result)
# 調用calculator子產品中的add函數 : 子產品名.函數名 或者 子產品名.變量名
result = calculator.division(2,5)
print(result)
# 調用calculator子產品中的get_result函數 : 子產品名.函數名 或者 子產品名.變量名
result = calculator.get_result("3+2*8-40")
print(result)
# 調用calculator子產品中的name變量 : 子產品名.函數名 或者 子產品名.變量名
print(calculator.name)
複制
輸出結果:
7
-3
10
0.4
-21
calculator
複制
注意:調用子產品中的函數時需要指明函數或者變量來自哪個模闆:<子產品名>.函數名 <子產品名>.變量名
2.from <子產品名> import <函數或者變量>,<函數或者變量>,<函數或者變量>…..
做一個簡單了解,從哪個子產品導入哪些函數或者變量,外部導入子產品後調用時隻能調用導入的函數或者變量,子產品中沒有導入的變量或者函數不能調用,示例代碼如下:
'''
從子產品calculator中導入add,sub兩個函數,
意味着調用calculator子產品時,隻能調用add,sub兩個函數,
calculator 子產品中的其他變量或者函數無法調用
'''
from calculator import add,sub
# 在代碼頂部已經聲明add函數從calculator導入,可以直接使用,不需要帶上模闆名
result = add(2,5)
print(result)
# 在代碼頂部已經聲明sub函數從calculator導入,可以直接使用,不需要帶上模闆名
result = sub(2,5)
print(result)
# 錯誤寫法:該子產品并沒有導入name變量
# result = multiplication(2,5)
# 錯誤寫法:該子產品并沒有導入name變量
# result = division(2,5)
# 錯誤寫法:該子產品并沒有導入name變量
# result = calculator.get_result("3+2*8-40")
# 錯誤寫法:該子產品并沒有導入name變量
# print(calculator.name)
複制
3.from <子產品名> import *
這種寫法表示直接導入子產品中的所有内容,意味着子產品中的函數或者變量都可以使用,該寫法實際上和第二種導入方法類似,示例代碼如下:
# 導入calculator 子產品中所有函數和變量
from calculator import *
# 在代碼頂部已經聲明導入calculator子產品所有内容,可以直接使用,不需要帶上模闆名
result = add(2,5)
print(result)
# 在代碼頂部已經聲明導入calculator子產品所有内容,可以直接使用,不需要帶上模闆名
result = sub(2,5)
print(result)
# 在代碼頂部已經聲明導入calculator子產品所有内容,可以直接使用,不需要帶上模闆名
result = multiplication(2,5)
print(result)
# 在代碼頂部已經聲明導入calculator子產品所有内容,可以直接使用,不需要帶上模闆名
result = division(2,5)
print(result)
# 在代碼頂部已經聲明導入calculator子產品所有内容,可以直接使用,不需要帶上模闆名
result = get_result("3+2*8-40")
print(result)
# 在代碼頂部已經聲明導入calculator子產品所有内容,可以直接使用,不需要帶上模闆名
print(name)
複制
輸出:
7
-3
10
0.4
-21
calculator
複制
使用該方法導入子產品時有一個缺陷:如果同時導入多個子產品檔案,如果子產品中的函數或者變量重名,編譯器也不知道具體是用哪一個子產品重名的函數或者變量,會造成意想不到的bug,往往這種bug最難查找!
四.簡單的電腦
利用上面的calculator子產品,再加上前面的python基礎知識,其實我們已經可以寫一個簡單的電腦了,唯獨沒有界面而已,至于界面後面會有pyqt5的教程,暫時不做過多講解。電腦代碼如下:
# 導入内置子產品time,計算耗時,預設機關秒
import time
# 導入calculator 子產品
import calculator
while True:
# 擷取表達式
input_str = input("請輸入表達式:")
if input_str == 'q': # 輸入 q 退出程式
break
time_start = time.clock()
print(calculator.get_result(input_str))
time_end = time.clock()
# 将 秒 轉為 毫秒
print("計算耗時:{}毫秒".format((time_end-time_start)*1000))
print("退出計算,程式結束!")
複制
測試結果:
五.重點總結
1.注意子產品的幾種導入方式,python開發中推薦使用寫法一的方式導入:import <子產品名>;
2.注意内置函數和内置子產品的差別:内置函數是任何子產品都可以直接調用,内置子產品需要import子產品之後才能調用子產品裡面的函數;
3.不同的子產品中可以存在相同的變量名或者函數名,但是不能與内置函數名或者内置子產品名字重複,避免造成沖突;
猜你喜歡:
1.python内置函數input/eval函數
2.字典推導式
3.清單推導式
4.python異常處理
轉載請注明:猿說Python » python子產品