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

news2024/9/24 11:31:32

目录

    • 专栏列表
    • 前言
    • 1. 模块基础
      • 目录结构
      • 示例模块 `mymodule.py`
    • 2. 导入模块
    • 3. 从模块中导入特定内容
      • 3.1 `from … import *`
      • 总结:
    • 4. 包
      • 示例包结构
      • `moduleone.py`
      • `moduletwo.py`
      • `__init__.py`
      • 导入包
    • 5. 模块搜索路径
    • 6. 内置模块
      • 示例
    • 7. 第三方库
    • 8. `__name__` 属性
    • 9. 初始化和清理
      • 示例
    • 10. 模块的 `__all__` 列表
    • 总结

专栏列表

  • Python教程(一):环境搭建及PyCharm安装
  • Python 教程(二):语法与数据结构
  • Python 教程(三):字符串特性大全
  • Python 教程(四):Python运算符合集
  • Python 教程(五):理解条件语句和循环结构
  • Python 教程(六):函数式编程
  • Python 教程(七):match…case 模式匹配
  • Python 教程(八):高级特性【高逼格代码】
  • 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 的模块系统。如果你有任何问题或需要进一步的帮助,请随时联系我们。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源小项目-基于STM32F103的频率测量实现 V1.1(ADC+TIM+DMA+FFT)

目录 一、快速傅里叶变换(FFT) 1.1 工作原理 1.2 应用 1.3 FFT官方支持库 二、使用外设简介 2.1 ADC外设 2.2 TIM外设 3.3 DMA外设 三、代码设计过程 3.1 初始化 3.2 DMA中断数据处理 3.3 其他自定义函数 1. 计算信号频率 2. 计算信号幅度…

G-EVAL: NLG Evaluation using GPT-4 with Better Human Alignment

文章目录 题目摘要方法实验分析相关工作结论 题目 G-EVAL:使用GPT-4进行NLG评估,具有更好的人类一致 论文地址:https://arxiv.org/abs/2303.16634 项目地址:https://github.com/nlpyang/geval 摘要 自然语言生成(NLG)系统生成的文本质量难以…

网站开发涉及到的技术内容介绍——前端

一、网站开发涉及前后端交互模式 一般来说网站项目分为两种【前后端不分离、前后端分离】,其中前后端不分离的项目是(后端语言可以直接与前端的html等内容糅合在一起,后端语言可以操作数据进行动态渲染前端的html文件进行展示)。后端分离的项目是(后端语言不会直接对前端的…

c++| c++11左右值引用,完美转发,可变参数模板

c| c11的新特性 左,右值引用什么是左值,右值左值引用和右值引用右值引用解决什么问题呢?移动构造万能引用形式 完美转发格式 lambada表达式格式 可变参数模板可变参数模板实现打印不同类型emplace_push以list的emplace_back的实现举例 左&…

掌握 HTTP 请求的艺术:理解 cURL GET 语法

在 Web 开发和服务器通信领域,掌握 HTTP 请求对于寻求有效与 Web 服务和 API 交互的开发人员至关重要。在众多可用于发出 HTTP 请求的工具中,cURL 脱颖而出,成为全球开发人员信赖的强大且多功能的命令行工具。在这篇博文中,我们将…

MySQL分组查询有关知识总结

目录 4. 分组查询(group by) 4.1 概述 4.2 分组函数 4.2.1 单个使用 4.2.2 组合使用 4.2.3 注意! 4.3 group by 4.3.1 单个字段 4.3.2 多个字段 4.3.3 提醒! 4.4 having 4.5 分组查询演示 4. 分组查询(…

海外仓怎么入局?货代还有发展的空间吗?

很多货代小伙伴可能都有一个疑惑:海外仓虽然火爆,但是怎么入局呢?显然,自建海外仓的试错代价太高了,成本高、选址难、管理起来更是一地鸡毛。既然无法自建,那转换赛道,管理别人的仓库&#xff0…

iOS面试之属性关键字(二):常见面试题

Q:ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些? 对应基本数据类型默认关键字是:atomic,readwrite,assign 对于普通的 Objective-C 对象:atomic,readwrite,strong Q:atomic 修饰的属性是怎么样保存线程安全的&#x…

如何将本地下载的切片电影进行合成一个视频

合成后的时长1:41 没有合成前是50个电影切片 注明:电影切片不是真实的切片名称而是自定义从0-50的数字 import requests # with open("电影.m3u8","r") as f: # n0 # for line in f: # if line.startswith("#"): …

SpringBoot项目如何安装Selenium自动化(详解)

目录 一、打开intellij idea,创建Maven项目 二、添加依赖 三、在Test路径下创建自动化文件 3.1 项目结构 3.2 代码 四、运行自动化 前言: java版本最低要求为8。电脑至少已安装一种浏览器,如:Chrome(推荐)、…

十日Python项目——第五日(商品数据)

#前言: 在最近十天我会用Python做一个购物类项目,会用到DjangoMysqlRedisVue等。 今天是第五天,主要负责撰写响应具体的商品数据。若是有不懂大家可以先阅读我的前四篇博客以能够顺承。 若是大家基础有不懂的,小编前面已经关于…

RJ45空包弹网口描述与应用

RJ45空包弹网口,通常指的是RJ45接口的空芯线缆(通常称为“空包”)和相应的连接器。这种线缆和连接器组合常用于网络布线中,特别是在需要将网络信号从一端传输到另一端,同时保持信号完整性和隔离性的场合。 描述&#…

C++初阶:list的使用和模拟实现

关于list可以先看一下这个文档:list文档 一.list的介绍和使用 1.1 list的介绍 list实际上就是链表,是带头双向循环链表。 1.2 list的使用 list的使用跟我们以前用C语言实现时的一样。push,pop,insert等等。 1.2.1list的构造 …

【从零开始一步步学习VSOA开发】开发环境搭建

开发环境搭建 开发 VSOA 首先需要搭建开发环境,这里讲解 Windows 下 C/C 开发环境搭建方法。 下载 IDE 并申请授权码 SylixOS 的开发和部署需要 RealEvo-IDE 的支持,因此您需要先获取 RealEvo-IDE 的安装包和注册码。 RealEvo-IDE 分为体验版和商业版…

简单的 微服务netflix 学习

简单的 微服务netflix 学习 一.Eureka 学习 1. 服务简单搭建 1.1 首先确定pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-…

FPGA入门系列:计数器

目录 微信公众号获取更多FPGA相关源码&#xff0c;且微信公众号为首发&#xff0c;第一时间获取最新文章&#xff1a; 计数器是一种典型的时序器件&#xff0c;常用于对时钟脉冲的个数进行计数&#xff0c;还用于定时、分频、产生同步脉冲等 按触发方式分&#xff1a;同步计数…

国内SSL证书颁发机构哪家服务更优质?

SSL证书作为保障网站数据传输安全的关键工具&#xff0c;其重要性不言而喻。选择一个可靠的SSL证书代理商&#xff0c;不仅能够提供多样化的证书类型&#xff0c;而且能在众多品牌中进行比较&#xff0c;选择最适合自己的、性价比更高的产品。此外&#xff0c;优质的代理商还能…

JAVA项目基于Spring Boot的多媒体素材库

目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导&#xff0c;获取源码后台 一、前言 信息化管理时代已至&#xff0c;计算机与互联网技术深度融合于生活点滴。本系统源于对用户需求的深刻洞…

Spark学习之SaprkCore

FlinkCore 1、JavaAPI 1、创建一个Topic并写入数据 向Kafka写数据 如果topic不存在则会自动创建一个副本和分区数都是1的topic package com.shujia.kafka;import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord…

JAVASpring学习Day2

面向切面编程 (AOP) 面向切面编程是一种编程范式&#xff0c;用于在程序中分离关注点&#xff0c;例如日志记录、事务管理和安全性。它主要由以下几个关键组成部分构成&#xff1a; 连接点 (Join Point)&#xff1a;在程序执行过程中可以插入切面的点&#xff0c;通常是方法的…