第6天:Python 模块和包

模块与包是任何大型程序的核心,就连 Python 安装程序本身也是一个包。
重点涉及有关模块和包的常用编程技术,例如如何组织包、把大型模块分割成多个文件、创建命名空间包。同时,也给出了让你自定义导入语句的秘籍。

先给大家解释一下模块、包、库之间的概念:

  • 模块(module)其实就是 py 文件,里面定义了一些函数、类、变量等

  • 包(package)是多个模块的聚合体形成的文件夹,里面可以是多个 py 文件,也可以嵌套文件夹

  • 库是参考其他编程语言的说法,是指完成一定功能的代码集合,在 Python 中的形式就是模块和包

模块其实一个 py 文件,用来封装一组功能;包是将一类模块归集到一起,比模块的概念更大一些;库就是由其它程序员封装好的功能组,一般比包的概念更大一些。
下面我们来分开介绍:

模块

由上面的内容我们得知模块就是一个 py 文件,这个文本文件中存储着一组功能,方面我们再次使用的时候,提高代码的复用率。我们成这一个的一个 py 文件为  Python 模块(Module)。其他 Python 脚本中,通过 import 载入定义好的 Python 模块。

定义和调用 Python 模块

我们先来看如何定义一个 Python 模块。

定义一个 hello.py 模块,内容如下:

def sayhello( ):
print("Hello World!")
通常我们使用 import 语句来引入模块,语法如下:
import module1[, module2[,... moduleN]]
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。调用的时候使用 模块名.函数名 来进行调用
以上的示例为例,我们新建 do.py 文件调用 hello.py 模块中方法。
do.py 文件内容如下:
# 导入模块
import hello

# 现在可以调用模块里包含的函数了
hello.sayhello()

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
在 do.py 页面执行快捷键 ctrl+b 控制台输出:Hello World!,证明调用 hello.py 中的方法成功。
这就是一个模块的定义和调用的示例,是不是也很简单。

from ... import ...

模块提供了类似名字空间的限制,允许 Python 从模块中导入指定的符号(变量、函数、类等)到当前模块。导入后,这些符号就可以直接使用,而不需要前缀模块名。

语法如下:

from modname import name1[, name2[, ... nameN]]
例如,要导入模块 hello 的 sayhello 函数,使用如下语句:
## 直接导入方法
from hello import sayhello
sayhello()
from … import * 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from modname import *
这提供了一个简单的方法来导入一个模块中的所有项目。
我们在 hello.py 中再添加一个 world 方法。

def world():
print("Python World!")

在 do.py 文件中引入全部方法进行调用。
## 导入所有方法
from hello import *
sayhello()
world()
执行后输出:
Hello World!
Python World!
证明 hello 模块中的两个方法都可以直接调用,实际项目中不推荐被过多地使用。

包(package)是 Python 中对模块的更高一级的抽象。简单来说,Python 允许用户把目录当成模块看待。这样一来,目录中的不同模块文件,就变成了「包」里面的子模块。此外,包目录下还可以有子目录,这些子目录也可以是 Python 包。这种分层,对模块识别、管理,都是非常有好处的。

特别地,对于一些大型 Python 工具包,内里可能有成百上千个不同功能的模块。科学计算领域,SciPy, NumPy, Matplotlib 等第三方工具,都是用包的形式发布的。

包定义

常见的包结构如下:

pakageName
-------__init__.py
-------moduleName1.py
-------moduleName2.py
------- ...
包路径下必须存在 __init__.py 文件。
示例:
我们创建一个 cal 的包,包中有一个计算器的 model ,结构如下:
cal
-------__init__.py
-------calculator.py
calculator.py 模块的代码如下:
def add(a,b) :
return a+b

def reduce(a,b) :
return a-b

def multiply(a,b) :
return a*b

def divide(a,b) :
return a/b

使用 Python 包

Python 包的使用和模块的使用类似,下面是导入的语法:
import 包名.包名.模块名
比如我们在 do.py 中导入 calculator.py
# 导入包
import cal.calculator
# 使用包的模块的方法
print(cal.calculator.add(1,2))
但是导入调用的时候报名比较长,这样就可以使用from ... import ...语句来简化一下。
# 导入包
from cal import calculator
# 使用包的模块的方法
print(calculator.multiply(3,6))
当包名越来越长的时候效果也会越好。
文中示例代码在这里:https://github.com/ityouknow/python-100-days

总结

本节给大家介绍了 Python  模块和包的使用,对 Python 工程师使用提供了支撑,模块和包的合理使用不断可以提高代码的使用效率,也可以更规范的整个工程项目的调用。

参考:

https://liam.page/2017/07/23/modules-and-packages-of-python/

系列文章

(0)

相关推荐

  • python的名词解释

    python的名词解释

  • python中import如何使用

    https://m.php.cn/article/471651.html相关免费学习推荐:python视频教程https://www.php.cn/course/list/30.html使用pytho ...

  • 致Python初学者:3分钟带你搞懂Python模块、包的区别和使用

    https://m.toutiao.com/is/JE2DFHP/ 一.模块和包的定义 模块的定义:任何*.py 的文件都可以当作模块使用import 导入 包的定义:包含一个__init__.py和 ...

  • 一文搞懂Python中的核心概念:导入,模块,包

    前言 Python作为一个解释器,一个程序,如果不导入任何外部模块或包,就做不了什么.理解Python如何导入模块和包将在几乎所有的场景中都很有帮助. 本文中的所有代码都是在Linux(Ubuntu) ...

  • python之路—模块和包

    阅读目录 一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 二 包 2.2 import 2 ...

  • Python 模块安装

    Python 模块安装的命令格式为: pip install 模块名. Python  pip模块安装的更新命令格式为: python -m pip install --upgrade pip 模块安 ...

  • Python模块详解

    Python模块详解

  • 手把手教你发布 Python 项目开源包

    好不容易码了个 python 项目,是不是很兴奋?那么怎么把这个项目发出去让大家看到呢?本文作者写了一份在 GitHub 上发布 python 包的简单分步指南. 作者以 SciTime 项目(一个对 ...

  • python模块

    模块在python里面是很实用的东西,类似于其他语言里的包或头文件. 一个模块其实就是一个保存了python代码的文件. 1.导入模块 用关键字import导入模块. 如,要使用数学函数,可以导入ma ...

  • 如何用Python中Tushare包轻松完成股票筛选(详细流程操作)

    如何用Python中Tushare包轻松完成股票筛选(详细流程操作) 本文包括安装以及调用Tushare包的详细流程操作 一.Tushare简介 Tushare是Python中一个十分好用的免费调用股 ...

  • Python模块之间的相互引用问题

    在某次运行过程中出现了如下两个报错: 报错1: ModuleNotFoundError: No module named '__main__.src_test1'; '__main__' is not ...