Python教程(廖雪峰)——模块

xiaoxiao2021-02-28  26

模块

#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():

    args = sys.argv  #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一节的内容,确保安装时勾选了pip和Add 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

默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在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自己本身的搜索路径不受影响。

转载请注明原文地址: https://www.6miu.com/read-1650389.html

最新回复(0)