1. 程式人生 > >關於python中對模組的呼叫

關於python中對模組的呼叫

簡介

在python中經常需要各模組相互呼叫,此時會出現以下幾種情況:

(1)同一目錄下檔案的呼叫

(2)父目錄呼叫子目錄中的檔案

(3)不同目錄下檔案的呼叫

示例

現有該目錄結構:AB中有A、B兩個子目錄,AB自身有檔案AB1.py

__init__.py:空檔案

A1.py:有兩個函式A_test01()和A_test02()

B2.py:有兩個函式B_test01()和B_test02()

(1)同一目錄下的檔案呼叫

實現A2呼叫A1中的A_test01()

import:將import後面的程式碼進行解釋

方法1:

from  A1 import *
A_test01()

方法2:

from  A1 import A_test01
A_test01()

方法3:

import A1
A1.A_test01()

 (2)父目錄呼叫子目錄

AB1.py呼叫B1.py中的B_test01函式

方式1

from B import B1
B1.B_test01()

方式2

from B.B1 import B_test01
B_test01()

方式3

from  B.B1 import *
B_test01()

方式4

因為B是一個包,當import一個包時,就是呼叫包下面的__init__.py檔案
因此需要在B下面的__init__.py檔案中新增   from . import B1  使得可以在__init__中呼叫子函式

在AB1.py中
import B
B.B1.B_test01()

 (3)子級呼叫父級別,或子級呼叫子級

在A1.py檔案中呼叫B下B1.py中的函式B_test01

當兩個函式不是同級目錄或被呼叫函式不是呼叫函式的子函式時候,需要新增環境變數

import os,sys
print(sys.path)  #可以檢視當前系統的環境變數

結果:
['/home/kiosk/PycharmProjects/untitled/AB/A', '/home/kiosk/PycharmProjects/untitled', '/usr/local/python/lib/python36.zip', '/usr/local/python/lib/python3.6', '/usr/local/python/lib/python3.6/lib-dynload', '/usr/local/python/lib/python3.6/site-packages']

 將AB的所在目錄新增到環境變數中,在AB所在的目錄在取尋找B目錄

import os,sys
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

執行結果:
/home/kiosk/PycharmProjects/untitled/AB/A/A1.py
/home/kiosk/PycharmProjects/untitled/AB
#已經找到了AB的絕對路徑

將AB的絕對路經新增到環境變數中

import os,sys
e=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,e)
print(sys.path)

執行結果:
['/home/kiosk/PycharmProjects/untitled/AB', '/home/kiosk/PycharmProjects/untitled/AB/A', '/home/kiosk/PycharmProjects/untitled', '/usr/local/python/lib/python36.zip', '/usr/local/python/lib/python3.6', '/usr/local/python/lib/python3.6/lib-dynload', '/usr/local/python/lib/python3.6/site-packages']

#可以看到AB的絕對路徑已經新增到環境變數中,因為環境便利是一個列表,因此可以使用insert新增到第一位

完整程式碼

# _*_ coding:utf-8 _*_
import os,sys
e=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,e)
from  B.B1 import *
B_test01()

執行結果:
this is B_test01!!