Python調(diào)用其他.py文件函數(shù)的常見場景及實現(xiàn)方法詳解
在 Python 程序運行時,如何調(diào)用另一個.py文件中的函數(shù),這是 Python 開發(fā)中非?;A(chǔ)且常用的操作,核心是通過模塊導(dǎo)入實現(xiàn)(Python 中一個.py文件就是一個獨立的模塊)。下面分不同場景詳細講解,包含可直接運行的示例。
一、核心前提
Python 中,被調(diào)用的文件必須是合法的.py文件(后綴為.py),且文件名稱不能與 Python 內(nèi)置模塊(如os、sys、math等)重名,否則會引發(fā)命名沖突。
二、場景 1:兩個文件在同一目錄下(最常用)
文件結(jié)構(gòu)
├── func_module.py # 被調(diào)用的文件(存放待調(diào)用的函數(shù))
└── main_program.py # 主程序文件(運行時調(diào)用其他文件的函數(shù))
步驟 1:編寫被調(diào)用文件(func_module.py)
在該文件中定義需要被調(diào)用的函數(shù)(普通函數(shù)定義即可,無特殊格式要求):
# func_module.py
def add(a, b):
"""簡單的加法函數(shù),用于被其他文件調(diào)用"""
return a + b
def multiply(a, b):
"""簡單的乘法函數(shù),用于被其他文件調(diào)用"""
return a * b
# 可選:防止該文件被直接運行時執(zhí)行多余代碼(僅被導(dǎo)入時不執(zhí)行以下內(nèi)容)
if __name__ == "__main__":
print("這是被調(diào)用的模塊文件,不是主程序!")步驟 2:主程序文件調(diào)用函數(shù)(main_program.py)
有兩種常用導(dǎo)入方式,可根據(jù)需求選擇:
方式 1:導(dǎo)入整個模塊,通過「模塊名。函數(shù)名」調(diào)用
# main_program.py
# 導(dǎo)入同一目錄下的func_module模塊(即func_module.py文件)
import func_module
# 調(diào)用模塊中的函數(shù),格式:模塊名.函數(shù)名(參數(shù))
result1 = func_module.add(3, 5)
result2 = func_module.multiply(4, 6)
print(f"3+5={result1}")
print(f"4×6={result2}")方式 2:直接導(dǎo)入模塊中的指定函數(shù)(推薦,減少冗余)
# main_program.py
# 從func_module模塊中導(dǎo)入add和multiply函數(shù),可直接調(diào)用
from func_module import add, multiply
# 直接使用函數(shù)名調(diào)用,無需加模塊前綴
result1 = add(3, 5)
result2 = multiply(4, 6)
print(f"3+5={result1}")
print(f"4×6={result2}")方式 3:導(dǎo)入函數(shù)并指定別名(解決命名沖突)
# main_program.py
# 導(dǎo)入函數(shù)并設(shè)置別名,避免與當(dāng)前文件中的同名函數(shù)沖突
from func_module import add as my_add, multiply as my_mul
# 使用別名調(diào)用函數(shù)
result1 = my_add(3, 5)
result2 = my_mul(4, 6)
print(f"3+5={result1}")
print(f"4×6={result2}")運行結(jié)果
運行main_program.py,輸出:
3+5=8
4×6=24
三、場景 2:被調(diào)用文件在子目錄下(按包組織文件)
當(dāng)項目文件較多時,會將功能模塊放在子目錄中,此時需要通過「包導(dǎo)入」實現(xiàn)。
文件結(jié)構(gòu)
├── main_program.py # 主程序文件
└── utils/ # 子目錄(作為Python包)
├── __init__.py # 包標識文件(Python3.3+可省略,但推薦創(chuàng)建,空文件即可)
└── func_module.py # 被調(diào)用的函數(shù)文件
關(guān)鍵說明
__init__.py的作用是標識當(dāng)前目錄為 Python 的「包」,使得目錄下的.py文件可以被作為模塊導(dǎo)入,該文件可以是空文件,也可以存放包的初始化配置。
步驟 1:編寫子目錄中的函數(shù)文件(utils/func_module.py)
內(nèi)容與場景 1 中的func_module.py一致,無需修改。
步驟 2:主程序文件調(diào)用(main_program.py)
需指定「包名(子目錄名). 模塊名」進行導(dǎo)入:
# main_program.py
# 方式1:導(dǎo)入子目錄下的模塊
import utils.func_module
result1 = utils.func_module.add(3, 5)
print(f"3+5={result1}")
# 方式2:直接導(dǎo)入子目錄模塊中的函數(shù)
from utils.func_module import multiply
result2 = multiply(4, 6)
print(f"4×6={result2}")
# 方式3:導(dǎo)入并指定別名
from utils import func_module as utils_func
result3 = utils_func.add(10, 20)
print(f"10+20={result3}")四、場景 3:被調(diào)用文件在父目錄 / 其他非同級目錄
如果主程序文件在子目錄,需要調(diào)用上層目錄(或其他非同級目錄)的函數(shù),需要先將目標目錄添加到 Python 的搜索路徑中(Python 默認只搜索當(dāng)前目錄和內(nèi)置模塊目錄)。
文件結(jié)構(gòu)
├── func_module.py # 被調(diào)用的函數(shù)文件(父目錄)
└── src/ # 子目錄
└── main_program.py # 主程序文件(需要調(diào)用上層的func_module.py)
實現(xiàn)步驟(src/main_program.py)
通過sys.path添加父目錄路徑,再進行導(dǎo)入:
# src/main_program.py
import sys
import os
# 1. 獲取當(dāng)前文件(main_program.py)的絕對路徑
current_file_path = os.path.abspath(__file__)
# 2. 獲取當(dāng)前文件所在目錄(src目錄)
current_dir = os.path.dirname(current_file_path)
# 3. 獲取父目錄(即func_module.py所在目錄)
parent_dir = os.path.dirname(current_dir)
# 4. 將父目錄添加到Python的模塊搜索路徑中
sys.path.append(parent_dir)
# 5. 此時即可像同級目錄一樣導(dǎo)入函數(shù)
from func_module import add, multiply
# 6. 調(diào)用函數(shù)
result1 = add(3, 5)
result2 = multiply(4, 6)
print(f"3+5={result1}")
print(f"4×6={result2}")五、關(guān)鍵注意事項
- 命名規(guī)范:模塊文件名稱建議使用小寫字母、下劃線,避免使用中文、空格和特殊字符,且不能與 Python 內(nèi)置模塊重名(如不能命名為
os.py、sys.py)。 __name__ == "__main__"的作用:被調(diào)用文件中的該判斷代碼塊,只有在該文件被直接運行時才會執(zhí)行,被其他文件導(dǎo)入時不會執(zhí)行,可用于模塊自測,不影響主程序運行。- 導(dǎo)入后修改生效問題:如果在程序運行過程中修改了被調(diào)用文件的函數(shù),當(dāng)前運行的程序不會實時生效,需要重啟程序(或使用
importlib.reload()強制重新加載模塊)。 - 權(quán)限問題:確保主程序?qū)Ρ徽{(diào)用的
.py文件有讀取權(quán)限,否則會引發(fā)導(dǎo)入失敗。 - 循環(huán)導(dǎo)入問題:避免兩個文件互相導(dǎo)入對方的函數(shù)(如
A.py導(dǎo)入B.py的函數(shù),B.py又導(dǎo)入A.py的函數(shù)),會引發(fā)ImportError,如需解決可通過延遲導(dǎo)入(在函數(shù)內(nèi)部導(dǎo)入)。
總結(jié)
- Python 中調(diào)用另一文件的函數(shù),核心是模塊導(dǎo)入,一個
.py文件就是一個模塊。 - 同級目錄直接用
import 模塊名或from 模塊名 import 函數(shù)。 - 子目錄需以「包」的形式導(dǎo)入,格式為
包名.模塊名。 - 非同級目錄需先通過
sys.path添加目標目錄到搜索路徑,再進行導(dǎo)入。 - 遵循命名規(guī)范,避免循環(huán)導(dǎo)入和命名沖突,確保程序穩(wěn)定運行。
到此這篇關(guān)于Python調(diào)用其他.py文件函數(shù)的常見場景及實現(xiàn)方法詳解的文章就介紹到這了,更多相關(guān)Python調(diào)用.py文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 實現(xiàn)對文件夾中的圖像連續(xù)重命名方法
今天小編就為大家分享一篇python 實現(xiàn)對文件夾中的圖像連續(xù)重命名方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
用十張圖詳解TensorFlow數(shù)據(jù)讀取機制(附代碼)
這篇文章主要介紹了用十張圖詳解TensorFlow數(shù)據(jù)讀取機制(附代碼),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
python圖形開發(fā)GUI庫wxpython使用方法詳解
這篇文章主要介紹了python GUI庫wxpython使用方法詳解,需要的朋友可以參考下2020-02-02

