作為一名程式設計師,你肯定希望與團隊其他使用者共享你所建立的有用模組。儘管你的模組可能有用,但是如果其他人需要花費大量精力來訪問模組中的有用功能,則其他人將不會使用它。
因此,如果想使使用者易於使用你的模組,匯入和執行模組的**應該簡短。本文將向你展示3種簡化匯入和執行python模組的方法。
假設我們有乙個名為 utils.py 的檔案,其中包含所有重要的函式和類
def add_two(num: int):
return num + 2
def multiply_by_two(num: int):
return num * 2
a = 5
在另乙個指令碼中,我們使用 from utils import * 從 utils.py 中匯入所有內容,除了變數 a 。那我們該怎麼做呢?
要做到這點很容易,只要加入all = [「add_two」, 「multiply_by_two」]即可。使用 import * 時,all 中指定的函式、類和包將被匯入。
__all__ = ["add_two", "multiply_by_two"]
def add_two(num: int):
return num + 2
def multiply_by_two(num: int):
return num * 2
a = 5
現在嘗試在另乙個指令碼中使用 import *
from utils import *
num = 3
print(add_two(num))
print(multiply_by_two(num))
print(a)
5
6traceback (most recent call last):
file "main.py", line 6, in
print(a)
nameerror: name 'a' is not defined
cool!這個錯誤告訴我們,只從 utils.py 中匯入了 add_two 和 multiply_by_two ,而並未匯入變數 a 。
想象一下我們目錄中檔案的結構如下:
.
├── data_modules
│ ├── load_data.py
│ └── process_data.py
└── main.py
load_data.py 如下所示:
class dataloader:
def __init__(self, data_dir: str):
self.data_dir = data_dir
def load_data(self):
print(f"loading data from ")
process _ data.py 如下所示:
class dataprocessor:
def __init__(self, data_name: str):
self.data_name = data_name
def process_data(self):
print(f"processing ")
要使用來自兩個不同檔案的類,我們需要從每個檔案匯入每個類。
from data_modules.load_data import dataloader
from data_modules.process_data import dataprocessor
data_loader = dataloader('data/')
data_loader.load_data()
data_processor = dataprocessor('data1')
data_processor.process_data()
這個方法很好,但是使用2個匯入語句是很繁瑣的。有沒有一種方法,我們可以把兩個匯入語句變成乙個匯入語句,就像下面這樣。
from data_modules import dataloader, dataprocessor
在 data _ modules 目錄下插入 _ init _. py 檔案可以很容易地解決這個問題:
touch data_modules/__init__.py
然後將前面提到的 import 語句插入到 _ init _. py 檔案中:
from .load_data import dataloader
from .process_data import dataprocessor
我們在這裡使用乙個 "." ,因為 load_data.py 和 _init _. py 在同乙個目錄中。
現在,讓我們嘗試從 data_modules 匯入 dataloader 和 dataprocessor 。
from data_modules import dataloader, dataprocessor
data_loader = dataloader('data/')
data_loader.load_data()
data_processor = dataprocessor('data1')
data_processor.process_data()
loading data from data/
processing data1
太棒了! 成功了!
我們的目錄是這樣的:
.
└── data_modules
├── __init__.py
├── load_data.py
├── main.py
└── process_data.py
當我們執行 main.py 的時候是這樣的:
$ python data_modules/main.py
我們可能希望簡化使用者或隊友執行 main.py **的步驟,只需執行父目錄:
$ python data_modules
這比執行 data_modules/main.py 更好,因為它更短,使用者不需要知道 data_modules 中有哪些檔案。
我們怎麼才能做到呢?
這時,__ main__.py 就派上用場了。只需將執行頂級目錄時要執行的指令碼更改為__ main __ .py 即可。在我們的例子中,我們需要將 main.py 變為 __ main__.py。
# rename main.py to __main__.py
$ mv data_modules/main.py data_modules/__main__.py
我們的新目錄將如下所示
.
└── data_modules
├── __init__.py
├── load_data.py
├── __main__.py
└── process_data.py
現在讓我們測試下
$ python data_modules
loading data from data/
processing data1
效果非常好!
在本文中,我們了解了如何讓你和那些使用你的軟體包的人更容易使用它。希望可以幫到你~
python 模組匯入和使用
什麼是模組?在python中,模組是 組織的一種方式,把功能相近的函式或者類放在乙個檔案中。乙個檔案 即乙個.py檔案 就是乙個模組。模組名就是檔名去掉.py。這樣做的好處 1,提高 的復用性和可維護性 乙個模組編寫完成後,可以很方便的在其他專案中匯入使用 2,解決了命名的衝突,不同模組中相同命名不...
python 匯入模組
最近開始學習python,遇到一些匯入模組的問題,花了幾分鐘終於琢磨明白了,給初學者介紹幾種型別 一 test sys test1 nv1.py nv2.py nv1.py 如下 classdog defadd self a,b self.a a self.b b c self.a self.b r...
python匯入模組
1 模組的定義 模組定義 用來邏輯上組織python 變數 函式 類 邏輯 目的是 實現乙個功能 本質就是.py結尾的python檔案。補充 包的定義 用來從邏輯組織模組的,本質就是乙個目錄 必須帶有乙個 init py檔案 2 匯入方法 匯入模組的方法 1.import module name 匯...