天天看點

python 子產品import

一.子產品簡介

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

python 子產品import

假如項目中既含有UI也有邏輯代碼還有功能實作,如果全寫在一個py檔案,可能會有幾萬甚至十幾萬行代碼,顯得代碼很臃腫,為了友善代碼閱讀和維護,我們可以将項目拆分為多個子產品,不同的子產品實作不同的功能,這樣分工合作開發效率也高,而且就算出現bug也友善定位。

python 子產品import

二.子產品分類

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("退出計算,程式結束!")           

複制

測試結果:

python 子產品import

五.重點總結

1.注意子產品的幾種導入方式,python開發中推薦使用寫法一的方式導入:import <子產品名>;

2.注意内置函數和内置子產品的差別:内置函數是任何子產品都可以直接調用,内置子產品需要import子產品之後才能調用子產品裡面的函數;

3.不同的子產品中可以存在相同的變量名或者函數名,但是不能與内置函數名或者内置子產品名字重複,避免造成沖突;

猜你喜歡:

1.python内置函數input/eval函數

2.字典推導式

3.清單推導式

4.python異常處理

轉載請注明:猿說Python » python子產品