模块
模块:一个.py文件就是一个module
①相同名字的函数和变量完全可以分别存在不同的模块中,但尽量不要与内置函数名字冲突
②为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)
例如,顶层包名为test,里面的abc模块为test.
③每一个包目录下面都会有一个__init__.py
的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py
可以是空文件,也可以有Python代码,因为__init__.py
本身就是一个模块。
mycompany
├─ web
│ ├─ init.py
│ ├─ utils.py
│ └─ www.py
├─ init.py
├─ abc.py
└─ utils.py
文件www.py
的模块名就是mycompany.web.www
;mycompany.web.www
对应的是web文件夹下的默认文件(___init___.py
);mycompany.web.xxx
对应的才是web文件夹下的其他文件
④自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys
模块,自己的模块就不可命名为sys.py
,否则将无法导入系统自带的sys
模块。
使用模块:
①使用前先import xxx
②交互式环境运行函数:先import py模块,再运行该模块下的函数,如:
import test1_1
test1_1.test()
③作用域:(private函数或变量被内部封装,一般不对外修改)
类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量;
类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等。
def _private_1(name):
return 'Hello, %s' % name
def _private_2(name):
return 'Hi, %s' % name
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
在模块里公开greeting()
函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()
函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法。
安装第三方模块:
①要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如Pillow的名称叫Pillow,因此,安装Pillow的命令就是:pip install Pillow
。
②安装Anaconda
,集成多个第三方库。
③模块路径搜索及添加:
当import一个py模块时,解释器默认搜索当前目录、所有已安装的内置模块和第三方模块。
查看内置和第三方模块的路径方法:
import sys
sys.path
添加自己的路径方法:
方法一:
import sys
sys.path.append('/Users/michael/my_py_scripts')
#这种方法是在运行时修改,运行结束后失效。
方法二:设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。