事先声明,这些乃是本人学习 Python 目录规范时碰到了问题,然后通过不断尝试出来的,这里做了一个总结,仅供大家参考,如有错误欢迎指正,我是在 Ubuntu 上用 pycharm 试,并不能保证 Windows 下同样适用(而且,shell 中和pycharm中不同,不知道为啥)。
相同点
没有相同之处,何来不同之分;聊区别之前,先看一下相同的部分。
下级目录导入上级目录中的模块,可以直接导入,如图
Python 3 中导入上级目录模块
Python 2中 导入上级目录模块
不同点
同级目录之间相互导入
Python 2 中同级目录可以直接导入
但如果加了 init.py 文件可以让导入时 pycharm 识别到这个模块,会有导入的提示
Python 3 不能直接导入同级目录,即使存在 init.py
应该这样导入,从这两个模块的共同父亲开始
即使没有 init.py 文件同样可以导入
上级目录,导入下级目录中的模块
Python 3 不需要 init.py 只要一层一层的导入就行
Python 2 则需要被导入的下级目录中的模块是在一个包中,即有 init.py
加上 init.py 即可
总结:就是版本3 中弱化的 init.py 的作用,但如果上级目录需要导入下级目录的模块,需要一层层的导入。
import module
其实就是将 module.py 文件解释执行,并赋给了 module 这个变量,如果我们需要调用 module.py 中写好的某个函数,可以直接调用 module.func(),
import package
其实就是执行了 package 下的 init.py 文件,这个可以很简单的尝试,只需要在 init.py 文件中加上一条 print 语句,再在某个模块中导入这个包,就会发现,会执行 print 语句。

本文探讨Python 2与3中模块导入的差异。在相同点上,两者下级目录都能直接导入上级模块。不同点在于Python 2允许同级目录直接导入,而Python 3则需要从共同父目录导入。Python 3弱化了init.py的作用,但上级导入下级仍需逐级导入。import module是执行模块文件,import package则是执行包的init.py文件。

被折叠的 条评论
为什么被折叠?



