模块、包、库的区别

这三者都是通过import和from…import…语句实现的。

模块(module)

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

简单来说任何一个以.py的文件都可以视为是一个模块(module)。

这个模块的功能可能就只有一个打印Hello World。

「hello_world.py」

def print_hello_world():print("Hello World")

当一个项目的功能很复杂的时候,我们可以把代码分割成很多不同的模块,主码代码仅保留实现逻辑,

例如:登录、查询、加密、解密…

分割成不同的模块之后,无论维护还是开发都会方便很多。

当某个功能出Bug后,也比较好定位代码中的Bug处。

包(Package)


包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。

简单来说,包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。init.py
用于标识当前文件夹是一个包。

如果说模块是一个py文件的话,那么包就是一个含有__init__.py文件的文件夹。

init.py是一个内容为空,且只有一个“名字”的文件。

 

上图就是一个简单的名字为HelloWorld的包。

假如我们需要将 「打印Hello World」 这个功能做的更加细化,让它根据使用对象,能输出不同语言的Hello World。

那么对于这个功能的实现又会写很多.py文件,但是这些.py文件都是用来支持「打印Hello World」 这个功能的,那么我们最好使用“包”这个方式对代码进行分类/分割。

对于一些第三方的包,或者框架例如Scrapy,Django,flask…往往都是使用“包”(好像说了正确的废话)

例如我们导了django,import导入的将是一个django的文件夹。

 

库(library)


对于库的定义,和包(Package)有点类似。

在中文网上我没有找到特别满意的文字定义,所以我Google了一下。

A Python library is a collection of related modules. It contains
bundles of code that can be used repeatedly in different programs. It
makes Python Programming simpler and convenient for the programmer. As
we don’t need to write the same code again and again for different
programs.

Python库是相关模块的集合。它包含可以在不同程序中重复使用的代码包。它使Python编程更加简单和方便。因为我们不需要为不同的程序一遍又一遍地写相同的代码。

一般我们说“库”的时候,会习惯性加上“第三方”,这也无可厚非。

一般能定义成库的,基本上都是完成了特定功能的实现,并得到使用者的肯定,但库的本质是“包”/“模块”。

例如django库,

对于使用的人来说,他是一个库;

但是对于该库作者来说,django就是他写的一个包。

 

django库实质就是一个包. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/473786.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战 | 使用CNN和OpenCV实现数字识别项目(步骤 + 源码)

导 读 本文主要介绍使用CNN和OpenCV实现数字识别项目,含详细步骤和源码。 前 言 在当今世界,深度学习和图像处理技术正在各个应用领域得到利用。在这篇博文中,我们将使用卷积神经网络 (CNN) 和 OpenCV 库完成数字识别项目。我们将逐步掌握该项目如何执行。 项目准…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十二)(4)

实验十二:微分方程模型 练习四 1.如图12.12所示,有一只猎狗在B点位置发现了一只兔子在正东北方距离它200m的地方0处,此时兔子开始以8m/s的速度向正西北方距离为120m的洞口A全速跑去,假设猎狗在追赶兔子的时候始终朝着兔子的方向全速奔跑,按要求完成下面的实验: (1…

【C++航海王:追寻罗杰的编程之路】string类

目录 1 -> 为什么学习string类? 1.1 -> C语言中的字符串 2 -> 标准库中的string类 2.1 -> string类 2.2 -> string类的常用接口 3 -> string类的模拟实现 3.1 -> 经典的string类问题 3.2 -> 浅拷贝 3.3 -> 深拷贝 3.3.1 ->…

TenorFlow多层感知机识别手写体

文章目录 数据准备建立模型建立输入层 x建立隐藏层h1建立隐藏层h2建立输出层 定义训练方式建立训练数据label真实值 placeholder定义loss function选择optimizer 定义评估模型的准确率计算每一项数据是否正确预测将计算预测正确结果,加总平均 开始训练画出误差执行结…

Unity设备分级策略

Unity设备分级策略 前言 之前自己做的设备分级策略,在此做一个简单的记录和思路分享。希望能给大家带来帮助。 分级策略 根据拟定的评分标准,预生成部分已知机型的分级信息,且保存在包内;如果设备没有被评级过,则优…

多模态(三)--- BLIP原理与源码解读

1 BLIP简介 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 传统的Vision-Language Pre-training (VLP)任务大多是基于理解的任务或基于生成的任务,同时预训练数据多是从web获…

国产制造,欧美品质:爱可声助听器产品质量获国际认可

随着科技的发展和全球化的推进,越来越多的中国制造产品开始走向世界舞台。其中,爱可声助听器凭借其卓越的产品质量,成为了国产制造的骄傲。 国产制造指的是在中国境内生产的产品,欧美品质则是指产品在设计、生产、质量控制等方面…

Invalid DataSize: cannot convert ‘30Mb‘ to Long

Invalid DataSize: cannot convert 30Mb to Long servlet:multipart:max-file-size: 30MBmax-request-size: 30MB

得物面试:Redis用哈希槽,而不是一致性哈希,为什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: Redis为何用哈希槽而不用一致性哈希? 最近…

python学习24

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

009集——磁盘详解——电脑数据如何存储在磁盘

很多人也知道数据能够保存是由于设备中有一个叫做「硬盘」的组件存在,但也有很多人不知道硬盘是怎样储存这些数据的。这里给大家讲讲其中的原理。 首先我们要明白的是,计算机中只有0和1,那么我们存入硬盘的数据,实际上也就是一堆0…

PLC_博图系列☞LAD

PLC_博图系列☞LAD 文章目录 PLC_博图系列☞LAD背景介绍LAD优势局限 LAD元素 关键字: PLC、 西门子、 博图、 Siemens 、 LAD 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软件。我并不是专业的PLC编程人员,也不懂电路&a…