百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

没有学不会的python--模块与包(python模块 包)

off999 2024-10-02 18:41 31 浏览 0 评论

没有学不会的python


前言

很长一段时间没更新博文了,不知道的人还以为我坚持不下去了呢,哈哈。说来惭愧,最近这段时间都忙着找工作,没什么时间更新这个系列的文章,导致停更了快一个月。其实每次都想着写一篇博文的,但每次都好像懒癌发作挺严重的,就没写了。

今天天气晴朗,梳了个油背头,决定老实坐在电脑面前码一篇文章。综合之前的更新进度以及我的更新计划,这次我们来讲讲python的模块和包。

模块与包

前面我们讲到的所有示例代码都是放在一个文件里面的,因为这些大部分都是demo(表示示例代码的意思),所以这样处理问题不大。但在实际开发中,我们往往要合理的组织各个函数的结构,不能一股脑的将所有的函数都放在一个py文件里面,由此就引申出了模块和包这两个概念。

包是一个更宽广的概念,它可以包含模块,而模块又可以包含非常多的函数、对象。因此,可以理解为包是一个模块的容器。

那使用包和模块有什么好处呢?

  1. 可维护性和拓展性。当我们合理的组织了代码的模块结构,日后如果需要拓展或者维护某个功能模块,我们就可以通过模块名称或者文档描述快速的定位到我们的目标模块或者函数,从而进行代码修改或拓展,而不影响其他模块的功能。
  2. 可复用性。我们可以将一个包或者单独的一个模块文件独立出来,提供给多个项目使用,从而把它从特定的项目中解绑出来。更好的地方是,我们可以将它上传到中央仓库以提供给任何需要使用的人或项目。
  3. 避免冲突。主要是避免函数名称和变量名称冲突。相同的函数名称和变量名称可以存在于不同的模块之中,而相同的模块名称又可以通过包名来加以区分,从而达到隔离的目的。
  4. 可读性强。当我们开始思考如何组织代码模块的时候,就会有目的的把相关的函数放在一起,从而可以通过文档描述更好地描述这个模块的功能。

关于包和模块的好处就讲这么多,对于不了解的朋友可能会不太能吸收这些意思,因为我们还没讲包和模块是怎么样的存在形式。所以看完了这篇文章后面的内容,最好回头看一下这几点重新理解一下

模块

在python中,一个.py文件就是一个模块。没错,之前我们写的代码都是一个模块文件。所以它的存在形式就是,当你看到一个py文件时,就要联想到它同时是一个模块,而这个模块里面的所有函数和变量是共用一个模块的。

自定义模块就是创建一个py文件啦。

包呢,其实就是一个文件目录,但它又不是普通的文件目录。区分包和文件目录的方法就是,每个包里面必定会有一个__init__.py文件。

模块和包的实践

这部分我们来实践一下,真正的认识模块和包的使用。假如我要创建一个包,用来处理日常的数据库连接操作,处理对象有MongoDB和MySQL两种数据库。那么我们就要创建一个名为DBUtils(名字随意,但是要符合实际用处,做到见名知意)的包,里面含有两个模块,分别命名为mongoDB_util和MySQL_util。步骤如下:

1、创建DBUtils目录。

可以看到图片上标注着两个箭头,这是两种创建包的方式,选其中一种就行了。区别在于,第一种不会自动创建__init__.py文件,需要手动创建。第二种则会自动创建__init__.py文件。建议第二种,省事。

2、在BDDButils目录下面新建一个__init__.py文件(如果用的是第二种方法,则跳过此步骤),说明这个文件目录是一个python包。

3、分别创建mongoDB_util和MySQL_util模块。此步和创建一般python文件没什么区别。

4、最后创建好的效果如下:

如何避免命名冲突

1、好的命名习惯

每个人都有自己的命名方式,但是一些好的命名习惯我们在平时要养成,这样才能尽量避免冲突。命名要尽量贴近实际功能,假如我们要创建一个函数用来添加日志信息,一般来说用(动作_对象)这样格式的命名方式会比较好。所以添加日志信息就是insert_logs或者add_logs。不要直接命名为logs。如果有不同的数据库处理对象,我们还可以加多一个后缀区分,比如insert_logs_mysql,表示是Mysql数据库中添加日志信息。

2、避免使用保留字

python中很多保留字,比如and/or/break等等这些。绝不允许使用保留字来命名函数或者变量。

3、引用模块时,为了避免和其它模块的变量产生冲突,要明确知道自己引用了什么。

比如下面的例子。

在mongoDB_util和MySQL_util文件分别新建一个con变量。并在mongoDB_util引用MySQL_util文件中的con变量。

mongoDB_util:

from DBUtils.MySQL_util import con

 con = "mongoDB"
 print(con)

MySQL_util:

con = "Mysql"

通过上述列子,我们可以试着运行mongoDB_util文件,你会发现con输出的是mongoDB,从而把从MySQL_util引入的con覆盖了。如果要用MySQL_util的con变量,应该这样使用:

from DBUtils.MySQL_util import con as mysql_con

con = "mongoDB"
print(con)
print(mysql_con)

即通过别名来重新命名,方式就是用as关键词,将con重新命名为mysql_con,这样就和本模块的con变量区分开来了。

通过上述方式可以很好的避免命名冲突,如果实际开发中发现某个变量输出的结果不是预期,可以留一下是否变量被覆盖了。

4、模块名称不要和python自带的模块名称冲突了。

比如系统自带了sys模块,我们就不要再命名一个sys的模块了,否则就会没办法导入系统的sys模块。

私有变量

可能我们还没有什么私有变量的概念。可以这么理解它,如果你希望一个函数(或者变量)可以被除了本模块之外的其它任意模块访问,则认为这个函数是公有函数(或者公有变量)。私有变量就是说,我希望我这个变量或者函数只能被本模块访问,而不被其它模块访问。

在java中有访问修饰符对变量进行访问限制,但是python却没有。不过大家都有一个遵守的规则就是,如果你要命名一个私有变量或者私有函数,你应该在名字前面加上一条下划线。

举例说明一下:

#通过在名字前面加_说明这个变量是私有变量
_private_val = "private"

#如果没有下划线就说明这个变量是可以被其它模块访问的
public_val = "public"

如果看过python源码的一些朋友可能会经常看到有双下划线+名字这样形式的函数。比如__init_()这样的。记住这些以双下划线开头和结尾的函数都是python系统自身的,我们不要模仿这样写法,因为我们要用这个特性区分系统函数和自定义函数。

两种不同的导入方式

python有两种不同的导入模块形式,分别是:

#用from的形式,可用as命名别名
from xxx import xxx
from xxx import xxx as xxx

#用from形式导入某个模块的所有对象。用*号表示所有对象
from xxx import *

#用import的形式,可用as命名别名
import xxx
import xxx as xxx

两种方式除了写法不一样以外,还有调用方式不同。最主要的本质区别是,所处的命名空间不一样。用from这样形式导入的变量或者函数会存在于本模块的命名空间中,因此有发生命名冲突的风险。因为这样,我们要避免全部导入某个模块的对象到本模块,不然会发生不可预知的问题。而用import这样形式的模块引入的对象,是不会和本地模块的对象冲突,因为它并不存在于本地模块中,而是存在于被引入的模块命名空间中。

比如上面讲的列子,就是用from引用MySQL_util中的con模块,由于这样引入的变量会存在于本模块中,因此和本模块的con变量发生了冲突,从而被本模块的con覆盖了。如果要避免这种冲突,就应该用as关键词命名别名,或者是用import的方式来引入。做个例子:

from DBUtils.MySQL_util import con as mysql_con
import DBUtils.MySQL_util

con = "mongoDB"

print(con)

# 使用from形式引入con
print(mysql_con)

# 使用import形式引入con
print(DBUtils.MySQL_util.con)

用import形式引入的模块,由于调用的时候必须通过包名.模块名.变量名称这样的形式调用,从而得以区分所调用的对象是来自哪个模块。

模块的搜索路径

默认情况下,python解释器是按照以下顺序查找我们要引入的模块的。首先是当前目录查找其次是python内置的模块查找最后是已安装的第三方模块。

要想查看python解释器的搜索路径,可以借助sys模块。

代码:

import sys
print(sys.path)

输出:

['D:\\code\\python\\blog', 'D:\\code\\python\\blog', 'D:\\软件安装\\python3.7 64\\python37.zip', 'D:\\软件安装\\python3.7 64\\DLLs', 'D:\\软件安装\\python3.7 64\\lib', 'D:\\软件安装\\python3.7 64', 'D:\\软件安装\\python3.7 64\\lib\\site-packages']

从输出的结果就可以查到python解释器寻找模块的路径。

引入模块的正确姿势

到这里基本就把python包与模块的基础知识讲完了,但是还有一些要注意的地方。

1、引入包的代码应该处于文件的顶部,而不可随意散落在文件的任意位置。

2、引入包的代码顺序应该是先python内置库再第三方库最后自己的库。

3、避免使用from xxx import *这样的引入方式。

感谢大家的阅读,如果喜欢我的文章可以关注我的公众号或者主页,关注一下,我会给你带来更多有用的博文。

相关推荐

兄弟打印机怎么连接wifi(兄弟打印机怎么连接wifi手机打印)
  • 兄弟打印机怎么连接wifi(兄弟打印机怎么连接wifi手机打印)
  • 兄弟打印机怎么连接wifi(兄弟打印机怎么连接wifi手机打印)
  • 兄弟打印机怎么连接wifi(兄弟打印机怎么连接wifi手机打印)
  • 兄弟打印机怎么连接wifi(兄弟打印机怎么连接wifi手机打印)
uefi模式下找不到硬盘(uefi引导找不到硬盘)

首先你的安装盘必须是从UEFI启动的,然后它才能安装为UEFI启动。(条件:Fat32文件系统,efi文件夹)其次你MBR+BIOS的系统想换成GPT+EFI的,分区得做一点改动,腾出来100M的空...

win7怎么安装蓝牙驱动程序(win7电脑安装蓝牙驱动教程)

方法如下:  1、再开始里点击控制版面,点击【硬件和声音】找到【添加设备】  2、之后再选择你要添加的蓝牙耳机。  3、系统就会提示正在与蓝牙适配器连接,然后提示添加成功。  4、点击“开始”-“...

怎么装系统win7旗舰版(电脑怎么装win7旗舰版)

1、目前支持64位的Wincc版本有:WinccV7Sp3、WinccV11Sp2、WinccV12。2、Wincc的V11与V12两个版本不能共存,即不能同时安装在同一台电脑上。上述这两...

u盘恢复工具免费版(u盘文件恢复工具免费版)
  • u盘恢复工具免费版(u盘文件恢复工具免费版)
  • u盘恢复工具免费版(u盘文件恢复工具免费版)
  • u盘恢复工具免费版(u盘文件恢复工具免费版)
  • u盘恢复工具免费版(u盘文件恢复工具免费版)
qq特别关心查询入口电脑版(电脑版qq特别关心网站登录)
  • qq特别关心查询入口电脑版(电脑版qq特别关心网站登录)
  • qq特别关心查询入口电脑版(电脑版qq特别关心网站登录)
  • qq特别关心查询入口电脑版(电脑版qq特别关心网站登录)
  • qq特别关心查询入口电脑版(电脑版qq特别关心网站登录)
怎样恢复桌面图标原样(怎样恢复桌面图标原样显示)

桌面图标恢复原样步骤方法如下:1.右键点击图标、并点击‘属性’两字,再点击‘打开文件位置‘2.然后找到文件所在的位置,然后暂时将文件在一旁放着3.然后再去点击‘更换图标’这四个字,找到刚刚打开的文件...

消除u盘写保护(怎么解除u盘写保护)

如果您的U盘启用了写保护功能,可以尝试以下几种方法来解除写保护:1.检查U盘上的物理写保护开关:部分U盘有一个物理的写保护开关,可以在U盘的外壳上找到。请确保开关处于非写保护状态。2.使用CMD命...

microsoft国际版(微软国际版bing)

win10系统自带的edge浏览器不分国内版和国际版。搜索引擎Bing分为国内版和国际版,区别如下一、迎合不同人群的需求。国际版显得更加个性,他迎合了不同人群的需求,在收缩上更加方便化和智能化,后期可...

为什么格式化sd卡后不能用了

SD卡受损后不格式化直接修复的方法:1,当系统发现SD卡受损之后,会提示进行格式化。2,把SD卡插入读卡器,接到电脑USB后,电脑提示格式化,点取消。然后查看一下属性。直接使用属性中的工具-开始检查...

c盘删除的东西能恢复吗(c盘删掉的东西还在吗)

    1.重新安装。  如果是安装在c盘下的普通应用程序,重新下载安装即可;  2.备份恢复或重装系统。  如果是删除了系统文件,在系统备过份且知道删除...

电脑如何重装系统winxp(电脑如何重装xp系统教程)

重装XP系统的步骤如下:1.首先备份您的重要文件和数据。2.插入XP系统安装光盘,重新启动计算机。3.在启动时按下计算机制造商指定的键(通常是F2、F12、Esc等)进入BIOS设置或启动菜单。...

win8密钥永久激活工具(win8密钥永久激活工具在哪)

win8.1正式版升级win10,自动激活,win8.1的密钥不能激活win10,升级win10正式版以后,无论怎么安装win10,系统都是自动激活状态。终极PID检测产品密钥:GCRJD...

制作系统安装u盘教程(制作系统安装盘及系统安装的步骤)

答u盘做系统详细步骤如下:  1.首先我们要准备一个10G内存的空白u盘,然后在装机吧官网下载一个装机吧一键重装系统软件,安装完成后打开软件,制作模式选择”USB-HDD“分区格式为”NTFS“点击...

联想win7怎么进入bios设置(联想win7进入bios设置win10)
联想win7怎么进入bios设置(联想win7进入bios设置win10)

联想电脑win7进入bios设置的具体步骤如下: 1、首先我们打开电脑的同时,按下键盘上的“F2”。2、然后我们在弹出来的窗口中就可以进入到BIOS界面中。3、然后我们按下键盘上的“F10”,之后回车确定即可退出。联想电脑win7...

2025-11-09 14:03 off999

取消回复欢迎 发表评论: