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