輕鬆匯入和執行Python模組的3種技巧

2022-07-05 22:57:09 字數 3966 閱讀 4651

作為一名程式設計師,你肯定希望與團隊其他使用者共享你所建立的有用模組。儘管你的模組可能有用,但是如果其他人需要花費大量精力來訪問模組中的有用功能,則其他人將不會使用它。

因此,如果想使使用者易於使用你的模組,匯入和執行模組的**應該簡短。本文將向你展示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 匯...