发布于2020-04-01 18:11 阅读(1745) 评论(0) 点赞(10) 收藏(5)
首先目录结构如下
hello.py定义如下
print(__name__)
def h():
print("hello world!!!!!!!!!!!!!!!!")
main.py定义如下
import hello
hello.h()
运行main.py,结果如下
hello
hello world!!!!!!!!!!!!!!!!
得出几个结论
1.import 可以导入同级模块(hello.py)
所谓同级可以理解为在同一目录(包)下
2.import 导入hello.py会先执行hello.py,还有,print(__name__)如果如果模块是被直接运行的,则结果为__main__,如果模块是被导入的,则结果为此模块名(hello).
3.想要避免被导入的模块中出现print的结果
使用如下代码,此方法用于模块测试
if __name__=="__main__":
print("hello python")
我们继续研究
father包下的__init__.py定义如下
import hello
PI=3.14
修改main.py如下,增加了几行代码
import hello
hello.h()
import father
print(father.PI)
print("world")
main.py执行结果:
hello
hello world!!!!!!!!!!!!!!!!
3.14
world
得到几个结论
1.循环导入只会执行一次(第一次main->hello,第二次main->father->hello,只print了一次__name__(也就是hello))
2.包的内容在__init__.py中,我们把包当成一个特殊的可以装子模块的模块
接下来我们探索子包中的导入问题
基础知识: from A import B
用来导入A路径(如果是多级路径,用点连接)下的B模块,或者是B对象
举个栗子
#导入模块
from father import son
#导入某个模块中的对象(类,函数,变量)
#PI为father包中__init__.py下的一个变量
from father import PI
sondir中的__init__.py如下所示
SONPI=3.141592653
sondir中的grandson.py
from father import PI
from sondir import SONPI
print(PI)
#这个函数在下个测试会使用到!
def grandson_func():
print("grandson's func")
尝试执行grandson.py,报错
ModuleNotFoundError: No module named 'sondir'
用相对路径试试
from . import SONPI
还是报错
ImportError: cannot import name 'SONPI'
再试试从绝对路径,这次从father开始
from father.sondir import SONPI
!!!过了过了
执行结果如下
hello
3.14
由此我们得出结论,在一个包下的模块,不能通过from . import 这种相对路径去访问包这个模块
(也就是__init__.py中的内容的你可以把它当做父级别的模块看待 , 如果要通过绝对路径访问,必须从根目录开始(father在根目录下,从father开始)
但是你说我非要用from sondir import grandson访问行不行?也是可以的,在grandson.py中加入以下代码
import sys
sys.path.append("..")
把grandson的父目录,也就是sondir以及同级目录加入模块搜索路径,解释器会去这个路径找你的包
据说python3.6.7以上不行,还好我是3.6.3
最后我们看一下包与包之间的导入
father包下的mod.py(与sondir2,sondir同级)
def modd():
print("<<<<<<<<<<mod>>>>>>>>>>>>")
sondir2包下的2个文件如下
init.py 空的
granddaughter.py
import sys
sys.path.append("..")
from sondir import grandson
import mod
mod.modd()
grandson.grandson_func()
granddaughter.py运行结果
hello
3.14
<<<<<<<<<<mod>>>>>>>>>>>>
grandson's func
可以发现印证了我们上面描述的过程
python在sondir这一级别(father以下)找到了sondir,成功导入了grandson.py,同时也成功找到了同级的mod.py
原文链接:https://blog.csdn.net/weixin_43340695/article/details/105231816
作者:imsorry
链接:https://www.pythonheidong.com/blog/article/295604/93eff4b1541f91109c21/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!