事先声明,这些乃是本人学习 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 语句。