23_python基础—模块和包

简介: 23_python基础—模块和包

一、模块


模块是 Python 程序架构的一个核心概念


每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块

模块名 同样也是一个 标识符,需要符合标识符的命名规则

在模块中定义的 全局变量 、函数、类 都是提供给外界直接使用的 工具

模块 就好比是 工具包,要想使用这个工具包中的工具,就需要先 导入 这个模块


1.1. 导入模块


1.1.1 导入模块的方式


import 模块名


from 模块名 import 功能名


from 模块名 import *


import 模块名 as 别名


from 模块名 import 功能名 as 别名


导入之后


通过 模块名. 使用 模块提供的工具 —— 全局变量、函数、类


1.1.2 导入方式详解


1.1.2.1 import (导入全部功能)


  • 语法


# 1. 导入模块
import 模块名
import 模块名1, 模块名2...
# 2. 调用功能
模块名.功能名()


  • 示例


import math
print(math.sqrt(9))  # 3.0


1.1.2.2 from…import… (导入部分功能)


  • 语法


# 从 模块 导入 某一个工具
from 模块名 import 功能1, 功能2, 功能3...


  • 导入之后


  • 不需要 通过 模块名.
  • 可以直接使用 模块提供的工具 —— 全局变量函数


  • 示例


from math import sqrt
print(sqrt(9))    # 3.0


1.1.2.3 from … import *


  • 语法


# 从 模块 导入 所有工具
from 模块名 import *


这种方式不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查


  • 示例


from math import *
print(sqrt(9))    # 3.0


1.1.2.4 as定义别名


  • 语法


# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名


  • 示例


# 模块别名
import time as tt
tt.sleep(2)
print('hello')
# 功能别名
from time import sleep as sl
sl(2)
print('hello')


1.2. 制作模块


  • 在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
  • 也就是说自定义模块名必须要符合标识符命名规则。


1.2.1 定义模块


新建一个Python文件,命名为my_module1.py,并定义testA函数。


def testA(a, b):
    print(a + b)


1.2.2 测试模块(__name__)


在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息.,例如,在my_module1.py文件中添加测试代码。


def testA(a, b):
    print(a + b)
# 测试信息
testA(1, 1)


此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行testA函数的调用。


解决办法如下

def testA(a, b):
    print(a + b)
# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行testA函数调用
if __name__ == '__main__':
    testA(1, 1)


  • __name__是系统变量,是模块的标识符,是Python的一个内置属性,记录着一个字符串。它的值分为两种情况:


  • 如果 是被其他文件导入的,__name__ 就是 模块名
  • 如果 是当前执行的程序 __name__ 是 __main__.


1.2.3 调用模块


import my_module1
my_module1.testA(1, 1)


1.2.4 注意事项


如果使用from .. import ..from .. import *导入多个模块的时候,且模块内有同名功能。当调用这个同名功能的时候,调用到的是后面导入的模块的功能。


  • 示例
# 模块1代码
def my_test(a, b):
    print(a + b)
# 模块2代码
def my_test(a, b):
    print(a - b)
# 导入模块和调用功能代码
from my_module1 import my_test
from my_module2 import my_test
# my_test函数是模块2中的函数
my_test(1, 1)


1.3. 模块定位顺序


当导入一个模块,Python解析器对模块位置的搜索顺序是:


当前目录


如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。

如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。


注意


自己的文件名不要和已有模块名重复,否则导致模块功能无法使用

使用from 模块名 import 功能的时候,如果功能名字重复,调用到的是最后定义或导入的功能。


# 拓展: 名字重复
# 问题:import 模块名  是否担心 功能名字重复的问题  -- 不需要
import time
print(time)
time = 1
print(time)
# 问题:为什么变量也能覆盖模块? -- 在Python语言中,数据是通过 引用 传递的。


<module ‘time’ (built-in)>

1

1.4. __all__


如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。


  • my_module1模块代码
# 定义多个功能,把某个功能添加到__all__
__all__ = ['testA']
def testA():
    print('testA')
def testB():
    print('testB')


  • 导入模块的文件代码


from my_module1 import *
testA()
# 因为testB函数没有添加到all列表,只有all列表里面的功能才能导入
testB()


testA


NameError: name ‘testB’ is not defined


二、包(Package)


2.1 概念


包:将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。


包 是一个 包含多个有联系的模块组织在一起 的 特殊目录(文件夹)

目录下有一个 特殊的文件 __init__.py

包名的 命名方式 和变量名一致,小写字母 + _

好处


使用 import 包名 可以一次性导入 包 中 所有的模块


2.2 制作包


[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。


注意:新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为。


示例


新建包mypackage

新建包内模块:my_module1 和 my_module2


  1. 模块内代码如下


# my_module1
print(1)
def info_print1():
    print('my_module1')


# my_module2
print(2)
def info_print2():
    print('my_module2')


2.3 导入包


2.3.1 方法一


# 导入
import 包名.模块名
# 调用功能
包名.模块名.功能名()


  • 示例


import my_package.my_module1
my_package.my_module1.info_print1()


2.3.2 方法二


注意:必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表。


from 包名 import *
模块名.功能名()


  • 示例
from my_package import *
my_module1.info_print1()


三、发布模块(知道)


  • 如果希望自己开发的模块,分享 给其他人,可以按照以下步骤操作


3.1 制作发布压缩包步骤


1) 创建 setup.py


  • setup.py 的文件
from distutils.core import setup
# 多值字典参数,每一个参数之间用逗号分隔
setup(name="hm_message",  # 包名
      version="1.0",  # 版本
      description="itheima's 发送和接收消息模块",  # 描述信息
      long_description="完整的发送和接收消息模块",  # 完整描述信息
      author="LiYang",  # 作者
      author_email="123@163.com",  # 作者邮箱
      url="www.qq.com",  # 主页
      py_modules=["hm_message.send_message",
                  "hm_message.receive_message"])   # 包中,包含的模块;把包中包含的模块全部写上去


有关字典参数的详细信息,可以参阅官方网站:


https://docs.python.org/2/distutils/apiref.html


2) 构建模块


  • 进入到发布模块这个目录,在终端中执行下面命令


$ python3 setup.py build


3) 生成发布压缩包


  • 进入到发布模块这个目录,在终端中执行下面命令


$ python3 setup.py sdist


注意:要制作哪个版本的模块,就使用哪个版本的解释器执行!


3.2 安装模块


$ tar -zxvf hm_message-1.0.tar.gz   # 解压缩(拿到的压缩包)
$ sudo python3 setup.py install     # 在解压下的文件中进行


3.3 卸载模块


直接从安装目录下,把安装模块的 目录 删除就可以


$ cd /usr/local/lib/python3.5/dist-packages/
$ sudo rm -r hm_message*


3.4 pip 安装第三方模块


第三方模块 通常是指由 知名的第三方团队 开发的 并且被 程序员广泛使用 的 Python 包 / 模块


例如 pygame 就是一套非常成熟的 游戏开发模块

pip 是一个现代的,通用的 Python 包管理工具


提供了对 Python 包的查找、下载、安装、卸载等功能


安装和卸载命令如下:

# 将模块安装到 Python 2.x 环境
$ sudo pip install pygame
$ sudo pip uninstall pygame
# 将模块安装到 Python 3.x 环境
$ sudo pip3 install pygame
$ sudo pip3 uninstall pygame

1)在 Mac 下安装 iPython


$ sudo pip install ipython


2)在 Linux 下安装 iPython


$ sudo apt install ipython
$ sudo apt install ipython3


四、总结


  • 导入模块方法


import 模块名
from 模块名 import 功能名
from 模块名 import *


  • 导入包


import 包名.模块名
from 包名 import *


  • __all__ = [] :允许导入的模块或功能列表
目录
相关文章
|
7天前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
30 4
|
1月前
|
数据处理 开发工具 开发者
requirement.txt 管理python包依赖
在 Python 项目中,`requirements.txt` 用于记录依赖库及其版本,便于环境复现。本文介绍了多种生成该文件的方法:基础方法使用 `pip freeze`,进阶方法使用 `pipreqs`,专业方法使用 `poetry` 或 `pipenv`,以及手动维护方式。每种方法适用不同场景,涵盖从简单导出到复杂依赖管理,并提供常见问题的解决方案,帮助开发者高效生成精准的依赖列表,确保项目环境一致性。
324 4
|
8月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
471 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
1月前
|
存储 安全 数据处理
Python 内置模块 collections 详解
`collections` 是 Python 内置模块,提供多种高效数据类型,如 `namedtuple`、`deque`、`Counter` 等,帮助开发者优化数据处理流程,提升代码可读性与性能,适用于复杂数据结构管理与高效操作场景。
98 0
|
2月前
|
数据安全/隐私保护 Python
抖音私信脚本app,协议私信群发工具,抖音python私信模块
这个实现包含三个主要模块:抖音私信核心功能类、辅助工具类和主程序入口。核心功能包括登录
|
8月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
246 7
|
5月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
232 14
|
8月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
349 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
9月前
|
Python
Python Internet 模块
Python Internet 模块。
208 74
|
6月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
83 8

推荐镜像

更多