1. 程式人生 > >python __函數 跨文件夾引用

python __函數 跨文件夾引用

java __name__ this 查看 結構 引用 進行 -- 執行

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 __函數 跨文件夾引用