Python 教程(九):内置模块与第三方模块

专栏列表


在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


前言

前面几章的代码我们都是新建一个 xxx.py文件来练习,但是随着代码越来越多,我们希望把一些代码分离出去,但是又能进行整合,这样及不会臃肿又可以让代码进行重用

Python 3 的模块系统是其核心特性之一,它允许你将代码组织成可重用的单元。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,在Python中,一个.py文件就称之为一个模块(Module)。

1. 模块基础

模块是 Python 中的一个文件,后缀.py,包含变量、函数和导入语句等。

  • 创建模块:创建一个 .py 文件,文件名即模块名。
  • 定义函数和变量:在模块文件中定义函数和变量。

目录结构

在这里插入图片描述

示例模块 mymodule.py

#!/usr/bin/env python3   #让这个文件可以直接在Unix/Linux/Mac上运行
# -*- coding: utf-8 -*-  #文件编码设置

'这是一段注释'

def greet(name):
    return f"Hello, {name}!"


PI = 3.14159

__name = 'ziyu'

# 私有变量
def __getname():
    return __name


def area(radius):
    return PI * radius ** 2

2. 导入模块

创建 module-test.py 文件, 使用 import 语句导入模块,并使用模块名访问其内容。

# 两层含义, 1.导入了mymodule模块,2.定义了mymodule变量
import mymodule  

print(mymodule.greet("张三"))
print(mymodule.PI)
circle = mymodule.area(5)
print(circle)

在这里插入图片描述

3. 从模块中导入特定内容

使用 from 关键字从模块中导入特定的函数、类或变量。

from mymodule import greet, PI

print(greet("Bob"))
print(PI)

在这里插入图片描述

3.1 from … import *

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from mymodule import *

print(greet("张三"))
print(PI)

在这里插入图片描述

总结:

  • 一个模块只会被导入一次,不管你执行了多少次 import。
  • 类似__xxx__这样的变量是特殊变量
  • 类似_xxx__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;

4. 包

包是包含多个模块的目录,通常包含一个 __init__.py 文件, 解决的问题是 多模块中变量名冲突或者重复 , 包是一种管理 Python 模块命名空间的形式

  • 创建包:创建一个目录,目录名即包名,并在目录中创建 __init__.py 文件。
  • 导入包:可以导入整个包或包中的特定模块。

示例包结构

mypackage/
    __init__.py
    moduleone.py
    moduletwo.py
    package-test.py

moduleone.py

def hello():
    return 'module1'

moduletwo.py

def hello2():
    return 'module2'

__init__.py

from … import * 语句, 把一个模块的所有内容全都导入到当前的命名空间也是可行的

from moduleone import *
from moduletwo import *

导入包

创建package-test.py 文件 , 添加下面的内容

import mypackage

print(mypackage.hello())
print(mypackage.hello2())

在这里插入图片描述

5. 模块搜索路径

Python 解释器在导入模块时会搜索模块文件,搜索路径由 sys.path 列表定义。

  • 查看搜索路径:打印 sys.path 可以查看模块搜索路径。
  • 修改搜索路径:可以通过修改 sys.path 来添加新的搜索路径。
import sys
print(sys.path)
sys.path.append('/path/to/my/modules')

6. 内置模块

Python 提供了许多内置模块,无需安装即可使用。

  • 常用内置模块:如 mathdatetimejson 等。

示例

import math

print(math.sqrt(16))

7. 第三方库

第三方库是 Python 社区提供的扩展模块,需要安装后才能使用。

  • 安装第三方库:通常使用 pip 工具安装。
  • 使用第三方库:安装后即可导入使用。
pip install requests
import requests

response = requests.get('https://api.github.com')
print(response.json())

8. __name__ 属性

模块的 __name__ 属性用于判断模块是被直接运行还是被导入。

if __name__ == "__main__":
    print("这是模块是直接被运行的")
else:
    print("这个模块是被导入运行的")

9. 初始化和清理

atexit 是 Python 中的一个模块,它提供了一个简单的接口来注册一些函数,这些函数将在 Python 程序正常退出时被调用。这通常用于执行清理工作,比如保存状态、关闭文件、释放资源等。

以下是 atexit 模块的基本用法:

  1. 注册函数:使用 atexit.register(func, *args, **kwargs) 来注册一个函数,该函数将在程序退出时被调用。func 是要注册的函数,*args**kwargs 是传递给该函数的参数。

  2. 程序退出:程序可以通过多种方式退出,包括正常退出(例如使用 sys.exit() 或程序达到末尾)或由于异常而退出。

  3. 清理操作:使用 atexit 模块或 try...finally 结构。

示例

使用上面创建的 mypackage 包来测试

import mypackage

import atexit

def cleanup():
    print("执行清理工作...")

def main():
    print("程序开始执行。")
    # 注册清理函数
    atexit.register(cleanup)

    # 程序主逻辑 ---
    print(mypackage.hello())
    print(mypackage.hello2())


if __name__ == "__main__":
    main()

10. 模块的 __all__ 列表

__all__ 列表定义了模块中哪些名称会被 from module import * 导入。

__all__ = ['greet', 'PI', 'Circle']

总结

模块是 Python 代码组织的基础,通过合理使用模块,你可以编写更清晰、更可维护的代码。了解如何创建模块、导入模块、使用内置模块和第三方库是每个 Python 程序员的必备技能。希望这个梳理能帮助你更好地理解和使用 Python 3 的模块系统。如果你有任何问题或需要进一步的帮助,请随时联系我们。

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziyu_jia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值