Python的自定义模块细讲


前言

  在Python中,自定义模块有两个作用:一个是规范代码,让代码更易于阅读,另一个是方便其他程序使用已经编写好的代码,提高开发效率。
  实现自定义模块主要分为两部分,一部分是创建模块,另一部分是导入模块


一、创建模块

  创建模块时,可以将模块中相关的代码(变量定义和函数定义等)编写在一个单独的文件中,并且将该文件命名为 “模块名 + .py” 的形式。

注意:创建模块时,设置的模块名不能是Python自带的标准模块名称(比如time、math、os等等)。

  例如,创建一个专门用于下载图片的模块,命名为 download_picture.py,其中 download_picture 为模块名,.py 为扩展名。部分代码如下:

    def requests_image_url(self, image_url, image_title):
        '''
            5.对图片地址发起请求
        '''
        response_second = self.session.get(image_url).content
        self.create_dir(response_second, image_title)

    def create_dir(self, response_second, image_title):
        '''
            6.创建文件夹
        '''
        if not os.path.exists(self.keyword):
            os.mkdir(self.keyword)
        self.save_images(response_second, image_title)

    def save_images(self, response_second, image_title):
        '''
            7.保存图片
        '''
        try:
            with open('{}/{}.jpg'.format(self.keyword, image_title), 'wb') as f:
                f.write(response_second)
            number = len(os.listdir(r'C:\Users\administrator0\Desktop\666\全网图片抓取\{}'.format(self.keyword)))
            print('第{}张图片{}下载成功'.format(number, image_title))
        except Exception as e:
            print('图片{}下载成功'.format(image_title))

注意:模块文件的扩展名必须是 “.py”


二、使用 import 语句导入模块

  创建模块后,就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码,这可以使用 import 语句实现。import 语句的基本语法格式如下:

import modulename [as alias]

  其中,modulename 为要导入模块的名称;[as alias] 为给模块起的别名,通过该别名也可以使用模块。
  下面将导入刚才创建的下载图片的模块 download_picture.py,并执行该模块中的方法。在模块文件 download_picture.py 的同级目录下创建一个名称为 1.py 的文件,在该文件中,导入模块 download_picture,并且执行该模块中 QwtpSpider() 类里面的 main() 函数,代码如下:

import download_picture  # 导入download_picture模块
picture = download_picture.QwtpSpider()  # 调用模块中的QwtpSpider()类
picture.main()  # 执行该类的main()方法

  执行上面的代码,显示如下所示结果。

在这里插入图片描述

扫描二维码关注公众号,回复: 15058834 查看本文章

说明在调用模块中的变量、函数或者类时,需要在变量名、函数名或者类名前添加 “模块名.” 作为前缀。例如,上面代码中的 download_picture.QwtpSpider,表示调用 download_picture 模块中的 QwtpSpider() 类。

  如果模块名比较长不容易记住,可以在导入模块时,使用 as 关键字为其设置一个别名,然后就可以通过这个别名来调用模块中的变量、函数和类等。例如,将上面导入模块的代码修改为以下内容。

import download_picture as d  # 导入download_picture模块并设置别名为d

  然后,在调用 download_picture 模块中的 QwtpSpider() 类时,可以使用下面的代码:

picture = d.QwtpSpider()  # 调用模块中的QwtpSpider()类

  使用 import 语句还可以一次导入多个模块,在导入多个模块时,模块名之间使用逗号 “,” 进行分隔。例如,分别创建了 download_picture、download_audio、download_video 3个模块文件。想要将这3个模块文件全部导入,可以使用下面的代码:

import download_picture, download_audio, download_video

三、使用 from…import 语句导入模块

  在使用 import 语句导入模块时,每执行一条 import 语句都会创建一个新的命名空间,并且在该命名空间中执行与 .py 文件相关的所有语句。在执行时,需要在具体的变量、函数和类名前加上 “模块名.” 前缀。如果不想在每次导入模块时都创建一个新的命名空间,而是将具体的定义导入到当前的命名空间中,这时可以使用 from…import 语句。使用 from…import 语句导入模块后,不需要再添加前缀,直接通过具体的变量、函数和类名等访问即可。

说明命名空间可以理解为记录对象名字和对象之间对应关系的空间。目前Python的命名空间大部分都是通过字典(dict)来实现的。其中,key 是标识符;value 是具体的对象。例如,key 是变量的名字,value 是变量的值。

  from…import 语法的语法格式如下:

from modelname import member

参数说明

  • modelname模块名称,区分字母大小写,需要和定义模块时设置的模块名称的大小写保持一致。
  • member用于指定要导入的变量、函数或者类等。可以同时导入多个定义(变量、函数或者类等),各个定义之间使用逗号 “,” 分隔。如果想导入全部定义,也可以使用通配符星号 “*” 代替。

  例如,通过下面的两条语句都可以从模块导入指定的定义。

from download_picture import QwtpSpider  # 导入模块中的QwtpSpider类
from download_picture import *  # 导入模块中的全部类,变量,函数

四、模块搜索目录

  当使用 import 语句导入模块时,默认情况下,会按照以下顺序进行查找模块路径。

  1. 在当前目录(即执行的Python脚本文件所在目录)下查找
  2. 到PYTHONPATH(环境变量)下的每个目录中查找
  3. 到Python的默认安装目录下查找

  以上各个目录的具体位置保存在标准模块 syssys.path 属性中,sys 模块是与Python解释器交互的一个接口,可以通过以下代码输出模块查询的具体目录。

import sys
print(sys.path)

  执行以上代码,将显示如下图所示结果。

在这里插入图片描述

  从上图可以看出,在导入任何模块时,都是遵循上面的三个路径查找顺序来从本机上查找是否有该模块。先找当前Python文件所在的目录;如果没有,再从Python配置的环境变量目录下找;如果还没有,到Python的安装目录下找。如果全部都没有,那么在导入该模块时会报错如下图所示。

在这里插入图片描述

  这时,我们可以通过以下3种方式添加指定的目录到 sys.path 中。在添加之前我们先看看自定义的模块 download 里面具体功能代码,只是打印输出一句话,如下图所示。

在这里插入图片描述

1. 临时添加

  临时添加,即在导入模块的Python文件中添加。例如,我们要在当前 1.py 文件中导入 download 模块,首先需要找到 download.py 文件的所在路径 “C:\Users\administrator0\Desktop\tool”,将该路径添加到 sys.path 中,然后打印输出 sys.path 的值,代码及运行结果如下图所示。

在这里插入图片描述

  然后在该代码中导入 download 模块即可成功运行,如下图所示。

在这里插入图片描述

说明通过该方法添加的目录只在执行当前文件的窗口中有效,其他窗口无效,故称为临时添加。例如下图所示。

在这里插入图片描述

2. 增加 .pth 文件(推荐)

  在Python安装目录下的 Lib\site-packages 子目录中(例如,博主的Python安装在 E:\anaconda3 目录下,那么该路径为 E:\anaconda3\Lib\site-packages),如下图所示。

在这里插入图片描述

  打开该目录,在里面创建一个扩展名为 .pth 的文件,文件名任意。这里创建一个 a.pth 文件,在该文件中添加要导入模块所在的目录。例如,将模块目录 C:\Users\administrator0\Desktop\tool 添加到 a.pth 文件,然后保存即可。当然也可以先新建一个文本文档,在里面写入 C:\Users\administrator0\Desktop\tool,如下图所示。

在这里插入图片描述
  保存之后更改文件后缀名为 .pth,如下图所示。

在这里插入图片描述

注意:创建 .pth 文件后,需要重新打开要执行的导入模块的Python文件,否则新添加的目录不起作用

  接下来在任意文件中都可以导入 download 模块,并且正常使用。如下图所示。

在这里插入图片描述

说明通过该方法添加的目录只在当前版本的Python中有效,如果安装了其他版本的Python,并且解释器更换为其他版本,则该目录无效。

3. 在 PYTHONPATH 环境变量中添加(推荐)

  打开 “环境变量” 对话框(具体方法如下)。
  第一、同时按下 Win + R 键,打开运行框,在里面输入 sysdm.cpl,然后点击确定,如下图所示。

在这里插入图片描述

  第二、在系统属性框里点击 高级,然后点击 环境变量

在这里插入图片描述

  在对话框中查看是否有 PYTHONPATH 系统环境变量,如果没有则先创建一个,创建方法如下。
  先点击 新建,如下图所示。

在这里插入图片描述

  在弹出的新建系统变量对话框中输入变量名PYTHONPATH,输入变量值也就是自定义模块所在路径,我定义的模块 download 所在路径是 C:\Users\administrator0\Desktop\tool,写入进去,然后依次点击确定记住有三个确定要点击,如下图所示。

在这里插入图片描述

注意:在环境变量中添加模块目录后,需要重新打开要执行的导入模块的Python文件,否则新添加的目录不起作用。

  接下来在任意文件中都可以导入 download 模块,并且正常使用。如下图所示。

在这里插入图片描述

说明通过该方法添加的目录可以在不同版本的Python中共享。

猜你喜欢

转载自blog.csdn.net/2201_75641637/article/details/129793383
今日推荐