模块
#Python中一个.py文件就称为一个模块(Module).
#好处:大大提高代码可维护性;编写代码不必从零开始(一个模块编写完毕就可被其他地方引用)
#好处: 还可避免函数名和变量名冲突—相同名字的函数和变量可分别放在不同模块中。
#但是要注意尽量不要与内置函数名字冲突
#模块名相同怎么办?为避免模块名冲突,Python引入了按目录来组织模块的方法,称为包(package)

#一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py文件就是一个名叫xyz的模块
#假设我们的abc和xyz这两个模块名字和其他模块冲突了,就通过包来组织模块,避免冲突。
#方法是选择一个顶层包名,如mycompany,按如下目录存放
"""mycompany
- __init__.py
- abc.py
- xyz.py"""
#引入包以后只要顶层包名不与别人冲突,那所有模块都不会与别人冲突。abc.py模块的名字就
#变成了mycompany.abc;xyz.py模块名变成了mycompany.xyz.

## 注意:每一个包目录下都会有一个__init__文件,其是必须存在的!否则,Python会把其作为
# 一个普通目录,而不是一个包。__init__.py可以是空文件夹,也可由Python代码,因为
# __init__.py本身就是一个模块,其模块名就是mycompany.

### 类似,可有多级目录,组成多级层次的包结构
"""mycompany
-- web
- __init__.py
- utils.py
- www.py
-- __init__.py
-- abc.py
-- utils.py
-- xyz.py"""
#文件www.py的模块名:mycompany.web.www,两个utils.py的模块名分别是mycompany.utils和mycompany.web.utils.

###!!自己创建模块时要注意命名,不能和Python自带的模块名称冲突。否则将无法导入系统自带模块。
#mycompany.web也是一个模块,其对应的.py文件是__init__.py.

#模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
#模块名不要和系统模块名冲突,可先查看是否已存在该模块:在Python交互环境执行import abc,成功说明存在。

 使用模块
#Python本身内置了很多非常有用的模块,只要安装完毕,这些模块就可立即使用。
#!/usr/bin/env python3   第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行
# -*- coding: utf-8 -*- ,第2行注释表示.py文件本身使用标准UTF-8编码;

' a test module '  第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;

__author__ = 'Michael Liao'  第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;

import sys  #使用sys模块的第一步,就是导入该模块# 导入sys模块后,我们就有了变量sys指向该模块,利用sys这个变量,就可以访问sys模块的所有功能
def test():
sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,
#因为第一个参数永远是该.py文件名称
python3 hello.py获得的sys.argv就是['hello.py'];python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael]。
    if len(args) == 1:
        print('Hello, world!')
    elif len(args) == 2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__ == '__main__':
    test()


# 当我们在命令行运行

hello

模块文件时,Python解释器把一个特殊变量

__name__

置为

__main__

,而如果在其他地方导入该

hello

模块时

# ,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试。

安装第三方模块


在Python中,安装第三方模块,是通过包管理工具pip完成的。

如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。

如果你正在使用Windows,请参考安装Python一节的内容,确保安装时勾选了pipAdd python.exe to Path

在命令提示符窗口下尝试运行 pip

,如果Windows提示未找到命令,可以重新运行安装程序添加 pip



一般来说,第三方库都会在Python官方的pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如Pillow的名称叫Pillow,因此,安装Pillow的命令就是:

pip install Pillow
模块搜索路径


当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:

>>> import mymodule
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mymodule

sys模块的path变量中:

>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', ..., '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']

如果我们要添加自己的搜索目录,有两种方法:

sys.path,添加要搜索的目录:

>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')

这种方法是在运行时修改,运行结束后失效。

PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。