1. 模块
简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。文件名即模块的名字。
如果想导入模块,那么必须把模块所在的路径加入到python解释器的搜索路径。PyCharm貌似会自动将当前路径添加到python搜索路径。
此处解释一下搜索路径。搜索路径也即sys.path的值。
我们可以在pycharm中打印 sys.path 看一下。
我们再打开命令行,进入python解释器界面看看sys.path是多少。此处用的是Anaconda Prompt。
可以看出跟PyCharm中显示的有点不一样。缺少了PyCharm的路径。
此时在Python解释器界面导入jinyuxin0318文件夹里的模块(也即python文件),会报找不到的异常。此处以导入module.py文件为例。
此时会报No module named 'module’的异常。因为module所在的路径不在sys.path中。
解决这以一问题的办法就是利用 sys.path.append(“模块所在路径”) 手动将module.py文件所在路径添加至sys.path中。l
在解释器中手动添加想要导入模块所在路径。
添加之后,import 就不会报错了。此处还自动执行了里面的命令。。。
此处介绍了怎么导入模块。前提必须保证模块所在路径存在于python搜索路径中,即sys.path中。
2. 包
考虑如果两个模块名字相同。那么包的作用就体现出来了,此处跟Java中package的作用一样。python中的包是一个文件夹。但并不是普通的文件夹。包所在的文件夹下面包含一个__init__.py的文件。 此文件夹名即包名。
下面以例子说明包的作用。
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。
考虑一个在Phone目录下的pots.py文件。这个文件有如下源代码:
#!/usr/bin/python
def Pots():
print "I'm Pots Phone"
同样地,我们有另外两个保存了不同函数的文件:
- Phone/Isdn.py 含有函数Isdn()
- Phone/G3.py 含有函数G3()
现在,在Phone目录下创建file init.py:
- Phone/__init__.py
如果你想显示使用Phone文件夹下面的所有模块的函数,那么你需要在__init__.py里使用显式的导入语句,如下:
from Pots import Pots
from Isdn import Isdn
from G3 import G3
当你把这些代码添加到__init__.py之后,导入Phone包的时候这些类就全都是可用的了。
#! /usr/bin/python
import Phone
Phone.pots()
Phone.isdn()
Phone.g3()
以上实例输出结果:
I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone
如上,为了举例,我们只在每个文件里放置了一个函数,但其实你可以放置许多函数。你也可以在这些文件里定义Python的类,然后为这些类建一个包。