引言
作為一名程式員,你肯定希望與團隊其他用戶共享你所創建的有用模塊,盡管你的模塊可能有用,但是如果其他人需要花費大量精力來訪問模塊中的有用功能,則其他人將不會使用它,
因此,如果想使用戶易于使用你的模塊,匯入和運行模塊的代碼應該簡短,本文將向你展示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
6
Traceback (most recent call last):
File "main.py", line 6, in <module>
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 {self.data_dir}")
process _ data.py 如下所示:
class DataProcessor:
def __init__(self, data_name: str):
self.data_name = data_name
def process_data(self):
print(f"Processing {self.data_name}")
要使用來自兩個不同檔案的類,我們需要從每個檔案匯入每個類,
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
效果非常好!
總結
在本文中,我們了解了如何讓你和那些使用你的軟體包的人更容易使用它,希望可以幫到你~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/264707.html
標籤:其他
上一篇:Python基礎教程:copy()和deepcopy()
下一篇:C++面向物件學習筆記(一)
