main.py
中去調(diào)用它們。調(diào)用 Python 函數(shù)的時候,大致會存在如下幾種情況。
假如現(xiàn)在有這樣一個文件樹(從其他地方copy的,稍加整改)
A
|-------- __init__.py
|-------- a.py
|-------- main.py
|-------- B
|-------- __init__.py
|-------- b.py
|-------- C
|-------- __init__.py
|-------- c.py
文件內(nèi)容如下:
# a.py
def a_hello():
print("A_HELLO")
----------------------------
# b.py
def b_hello():
print("B_HELLO")
----------------------------
# c.py
def c_hello():
print("C_HELLO")
----------------------------
# main.py
def main_hello():
print("MAIN_HELLO")
為什么要有
__init__.py
文件呢?
【答】在Python工程里,當(dāng)python檢測到一個目錄下存在__init__.py文件時,python就會把它當(dāng)成一個模塊(module)。Module跟C++的命名空間和Java的Package的概念很像,都是為了科學(xué)地組織化工程,管理命名空間。
__init__.py
可以是一個空文件,也可以有非常豐富的內(nèi)容。
這個比較簡單,比如我想在main.py
中調(diào)用main_hello()
函數(shù),那么我直接main_hello()
即可
比如我想在main.py
中調(diào)用a.py
中的a_hello()
函數(shù),可做如下操作
import a
a.a_hello()
比如我想在main.py
中調(diào)用文件夾B
下b.py
中的b_hello()
函數(shù),可做如下操作:
from B import b
b.b_hello()
比如我想在c.py
中調(diào)用a.py
中的函數(shù),這時候如果用上面的方法就會報(bào)錯No module named xx
。解決方法就是將目錄A
加到系統(tǒng)路徑下
import sys
sys.path.append('E:\\testnow\\A') #括號內(nèi)容為文件的絕對路徑
注意,sys.path
添加目錄時注意是在windows還是在linux下,windows下需要用\\
,linux下需要用/
否則會出錯。這樣需要區(qū)分操作系統(tǒng),而且需要知道絕對路徑,豈不是很不好用??吹接写罄杏玫竭^如下操作:
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
上面這句話很長,但也不難理解,os.path.dirname(__file__)
獲取當(dāng)前文件的絕對路徑,os.path.join(xx,'..')
在后面追加..
,相當(dāng)于進(jìn)入上一級目錄,然后再os.path.abspath(xx)
獲取絕對路徑,最后sys.path.append()
將其加入系統(tǒng)路徑當(dāng)中。經(jīng)過這些操作之后,被加入系統(tǒng)路徑中的所有文件中的函數(shù)都可以被調(diào)用了。
后面有朋友問了,所以這里再補(bǔ)充一下 2022-09-23
因?yàn)樵瓉淼捻?xiàng)目被我刪了,這里我并沒有做測試啊,一般我都是這么用的,應(yīng)該無問題。
比如我想在c.py
中調(diào)用b.py
中的函數(shù),那么c.py
的import
為
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import B.b as b
b.b_hello()
import os
os.system(r'python tmp.py')
# 最好給文件的絕對路徑,否則有可能會找不到文件。
Module
),是一個 Python 文件,以 .py
結(jié)尾,包含了 Python 對象定義和 Python 語句。__init__.py
文件, 該文件的內(nèi)容可以為空。__init__.py
用于標(biāo)識當(dāng)前文件夾是一個包。__init__.py
文件的文件夾。另外,對于導(dǎo)入模塊可以使用import model1
或from model1 import func1, func2, ...
。其實(shí),這兩種方式看似一樣,但是是有所區(qū)別的,具體請看
聯(lián)系客服