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中,这时需要对该路径进行标注。

  

猜你喜欢

转载自www.cnblogs.com/Marxhwsy/p/9500826.html