python __函數 跨文件夾引用
1. __name__
被調用模塊.__name為被調用模塊的模塊名,若為直接執行函數,__name__ = 該‘__main__‘。
運用最廣泛的語句為:if __name__ == ‘main‘:
這段語句的目的為使得該py文件既可以自我執行又可以被調用。
eg.py
def test():
print(‘this is a test‘)
if __name__ == ‘__main__‘:
test()
這段代碼中,可以使其他py文件調用eg.py時,因為此時__name__為直接執行的文件名,if不執行,同時又可以調用test()方法;與此同時,當eg.py直接執行時,該__name__為‘__main__‘,該if執行,可以看做java中的main函數;
2. __init__
__init__通常以兩種方式出現在py中:文件、函數。__init__作為一個獨立的py文件在python文件中出現,其主要目的為該文件夾中的py文件獨立成為一個包,獨立的py包中均包含該文件。通常來說,__init__文件為空;其次__init__作為函數創建一個新的class,與__new__操作不同在於,__new__函數將返回一個該class的實例。詳細可以查看:https://www.cnblogs.com/Lands-ljk/p/5880483.html
在這裏遇到一個問題,vs code環境下python跨文件夾引用:大致結構如下:
project:
--app.py
--folder
mod1
mod2
在這裏通過project下app.py文件引用同級folder中mod1模塊,同時mod1對mod2有引用,此時需要對folder中創建空文件___init__.py,相應的import語句要進行修改,代碼如下:
app.py:
from folder.mod1 import mod1_service
mod1_service()
mod1:
from folder.mod2 import mod2_service
def mod1_service():
mod2_service()
mod2:
def mod2_service():
print(‘mod import success‘)
如果在mod1中沒有將folder.寫全,會發現該找不到mod2,尋求原因:通過import sys print(sys.path) 看到當運行app.py時文件以/project為引用的目錄,不會進入folder中,這時需要對該路徑進行標註。
python __函數 跨文件夾引用