码迷,mamicode.com
首页 > 编程语言 > 详细

python __函数 跨文件夹引用

时间:2018-08-19 12:53:28      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:__init__   代码   https   lan   name   路径   logs   vs code   main函数   

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 __函数 跨文件夹引用

标签:__init__   代码   https   lan   name   路径   logs   vs code   main函数   

原文地址:https://www.cnblogs.com/Marxhwsy/p/9500826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!