1.同級、同目錄的文件之間的訪問app
有這樣一個目錄結構函數
假如,in_A.py 想訪問 hello_world.py 中的函數怎麼呢? ------->>> importspa
只需在 in_A.py 中 寫入 code
1 import hello_world
2 hello_world.functions()
這樣就能夠訪問啦,什麼原理呢?對象
import hello_world 的本質blog
首先,import 語法會將 hello_world 裏的全部內容解釋到內存中,並把它賦值給 hello_world 這個變量,而後咱們就能夠經過點號訪問 這個變量裏的內容了,好比函數,變量什麼的內存
好比 hello_world.hello() 就是調用了hello_world.py 裏的 hello() 方法。it
接下來一個問題,import 是怎麼找到 hello_world.py 這個文件的呢?io
import 首先會在當前目錄下找,沒找到就去環境變量裏找。function
環境變量,能夠經過 sys 模塊下的 path列表查看哈
到這裏,就明白了同級同目錄之間的文件訪問啦
2.同級、不一樣目錄的文件之間的訪問
如今來了個這樣的目錄結構
這時若是說 in_B.py 這位老兄也想訪問 hello_world.py 裏的對象怎麼辦呢? 直接 import是確定不行啦,由於當前目錄找不到,環境變量裏也找不到。
若是 import content_A 會是什麼效果呢?固然也是不行啦。content_A 沒在環境變量裏。他沒有在環境變量裏那就把他的「 father 」加進去吧,爲啥加他的上級目錄?找到他的父級目錄也就找到他了
把上級目錄加入環境變量:
1 import os 2 import sys 3 path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 4 # print(path) 5 sys.path.append(path)
dirname() 函數返回上級目錄
abspath() 函數把相對來說轉化爲絕對路徑
__flie__ 變量存儲的是當前文件的相對路徑
最後哦經過 sys 模塊把一個路徑加入環境變量
完成了上面的 一系列操做之後,問題又來了
以前 import 的是 .py的文件,如今直接 import 了一個目錄,解釋器會幹什麼呢?若是一個目錄下有一堆文件他應該 import 那個呢?
hh,解釋器是很聰明的,他會跑去解釋目錄下的 __init__.py 文件。一般這個文件都是沒有內容的,可是解釋器既然都去了,那麼就給幾行代碼給他解釋一下吧。
這時就能夠用把 content_A 的父級目錄加入環境變量的方法,把 content_A 加入加入環境變量啦,把代碼寫入__init__.py 就行了,這時就能夠愉快的在
in_B.py 裏 import, 「content_A」目錄下的文件啦,不僅限於 hello_world 哦
3.不一樣級、不一樣目錄的文件之間的訪問
有了上面的思路,想 import 誰,把他的 父級目錄 送進 環境變量就能夠了,就不舉例子了