7 Python的模块和包
概述
在上一节,我们介绍了Python的异常处理,包括:异常、异常处理、抛出异常、用户自定义异常等内容。在这一节中,我们将介绍Python的模块和包。Python的模块(Module)和包(Package)是Python的两个主要概念,它们都是用来组织和封装代码的机制。
什么是模块
模块实际上就是一个Python文件,它包含了Python对象定义和Python语句。文件名是模块名加上“.py”后缀,比如:如果一个文件名为my_module.py,那么它就被称为my_module模块。模块让你能够有逻辑地组织你的Python代码段,把相关的代码分配到一个模块里能让你的代码更好用、更易懂。模块能定义函数、类和变量,模块里也能包含可执行的代码。模块可以被别的程序引入,以使用该模块中的函数、类等功能。
Python中的模块可以分为两种:内置模块和第三方模块。内置模块是Python自带的模块,比如:datetime(日期和时间处理)、math(数学运算)、random(随机数生成)等。第三方模块则是由Python社区或开发者开发的模块,在Python的官方网站上可以找到。
使用模块的好处有很多,主要包括:提高代码复用性、代码组织结构更加清晰、降低程序耦合性、提高程序的安全性等。
导入模块
在Python中,可以使用import语句来导入模块,这使得你可以使用其他模块中定义的函数、类和变量。导入模块时,Python会执行该模块中的所有顶层代码。如果模块本身又导入其他模块,那么这些导入的模块也会一并被执行。
# 导入os模块
import os
# 导入math模块
import math# 使用os模块中的变量
print(os.curdir)# 使用math模块中的函数
print(math.pow(2, 4))
在上面的示例代码中,os和math都是Python提供的标准库模块。os模块提供了与操作系统交互的函数,math模块则提供了许多与数学计算相关的函数。
如果你只想导入模块中的特定函数和变量,可以使用from import的语法。如果你想导入模块中的所有内容,可以使用from import *的语法。
# 从math模块导入log10函数
from math import log10
# 从os模块导入所有内容
from os import *# 使用math模块的log10函数
print(log10(100))
# 使用os模块的cpu_count函数
print(cpu_count())
自定义模块
除了导入系统的内置模块,还可以创建自定义模块,并导入这个自定义模块。比如:你有一个名为my_module.py的Python文件,其中定义了一个名为为my_func的函数。
# my_module.py文件def my_func(a):print(a)
你可以在另一个Python文件main.py中导入my_module模块,并使用该模块中的函数。
# main.py文件
import my_modulemy_module.my_func('hello CSDN')
__name__
在Python中,__name__是一个特殊变量,用于表示一个模块的名称。当一个模块被直接运行时,__name__的值为__main__。当该模块被导入为库或者子模块时,__name__的值将是该模块的名称。
这个变量常用于在模块中执行特定的代码,只有当该模块被直接运行时才执行。在一个模块中,可以使用if __name__ == "__main__"来确保后面的代码只在该模块被直接运行时执行,而在其他模块中被导入时则不执行。比如:有一个模块my_sky,对应的my_sky.py文件如下。
# my_sky.pydef sky_blue():print('sky blue')if __name__ == '__main__':sky_blue()
直接运行my_sky.py时,会执行sky_blue函数并输出“sky blue”。但在另一个脚本中导入my_sky.py时,并不会执行sky_blue函数。这个特性常用于编写可执行脚本或测试脚本,只有在直接运行该脚本时,才会执行某些操作。
什么是包
包是一个包含多个模块的目录,该目录下必须包含一个名为__init__.py的文件,该文件可以为空。包可以嵌套,即一个包可以包含多个子包。包提供了组织模块的机制,使得模块能够按照目录结构进行分类,便于管理和查找。包将相关的代码文件和资源文件打包在一起,从而形成一个独立的单元。
Python的包可以包含:Python模块、其他包、包特定的数据文件和配置文件。
创建包
要创建一个Python包,需要创建一个文件夹,通常以该包的名称命名,并在该文件夹中包含一个__init__.py文件。这个__init__.py文件是一个特殊的文件,当一个包被导入时,该文件会自动执行,这可以用于初始化该包或定义在该包中导出的函数和变量。包中还可以包含其他的.py文件,这些文件中包含函数、类、变量等包的特定代码。
创建一个Python包的具体步骤如下:
1、创建一个文件夹,作为包的根目录,并命名为包的名字,包名通常使用小写字母和下划线。
2、在该文件夹中创建一个名为__init__.py的文件。这个文件是一个特殊的文件,当一个包被导入时,该文件会自动执行。这个文件可以是空的,也可以包含一些初始化代码,或者定义在该包中导出的函数和变量。
3、在该文件夹中创建其他的Python文件和文件夹,用于包含包的具体代码和资源。
4、如果需要在包的元数据中使用一些特殊的标记或者依赖项,可以在该文件夹中创建一个名为setup.py的文件,用于描述该包的元数据和依赖项。
下面是一个简单的示例,展示了如何创建一个包含两个模块的Python包。
1、创建一个名为my_package的文件夹,作为包的根目录。
2、在该文件夹中创建两个Python文件,分别为module1.py和module2.py。
3、在module1.py中定义一个名为func1的函数。
# module1.py文件
def func1(): return "Hello from module 1"
4、在module2.py中定义一个名为func2的函数。
# module2.py文件
def func2(): return "Hello from module 2"
5、在my_package文件夹中创建一个名为__init__.py的文件,用于导出在模块中定义的函数。
# __init__.py文件
from .module1 import func1
from .module2 import func2
6、现在,你可以在其他Python代码中使用这个包了。
import my_package# 输出:Hello from module 1
print(my_package.func1())
# 输出:Hello from module 2
print(my_package.func2())
导入包
要使用一个Python包,需要使用import语句来导入该包,并使用.操作符来访问该包中的函数、类和变量等。比如:有一个名为my_package的包,其中包含一个名为my_module的模块,my_module模块中包含一个名为my_func的函数,可以使用下面的示例代码来使用该包。
import my_package.my_modulemy_package.my_module.my_func()
在Python中,导入包的具体步骤如下:
1、确保已经将包安装到你的Python环境中,可以使用pip命令来安装包,比如:pip install package_name。
2、使用import语句导入包,可以使用点号来指定包的路径。在下面的示例代码中,将导入package包中的module模块。
import package.module
3、如果只想导入包中的某个模块或函数,可以使用from import语句。在下面的示例代码中,将导入package包中的module模块,并可以直接使用该模块中的函数和变量。
from package import module
4、如果需要导入包中的多个模块或函数,可以使用逗号分隔它们。在下面的示例代码中,将导入package包中的module1、module2、func1和func2。
from package import module1, module2, func1, func2
注意:包和模块的名称,必须与文件系统中的目录结构相对应。如果包中没有包含__init__.py文件,则不能将其视为一个包。此时,需要手动将该目录添加到Python的模块搜索路径中才能正常使用。
相关文章:
7 Python的模块和包
概述 在上一节,我们介绍了Python的异常处理,包括:异常、异常处理、抛出异常、用户自定义异常等内容。在这一节中,我们将介绍Python的模块和包。Python的模块(Module)和包(Package)是…...
【JavaWeb 篇】使用Servlet、JdbcTemplate和Durid连接池实现用户登录功能与测试
在现代Web应用程序开发中,用户登录功能是基础中的基础。它为用户提供了安全访问系统的途径。本篇博客将引导您通过使用Servlet、Spring框架的JdbcTemplate以及Durid连接池,来构建一个完整的用户登录功能。我们将详细展示每个部分的代码,并解释…...
【Unity3D赛车游戏】【六】如何在Unity中为汽车添加发动机和手动挡变速?
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:Uni…...
【Go 基础篇】切片:Go语言中的灵活数据结构
在Go语言中,切片(Slice)是一种强大且灵活的数据结构,用于管理和操作一系列元素。与数组相比,切片的大小可以动态调整,这使得它成为处理动态数据集合的理想选择。本文将围绕Go语言中切片的引入,介…...
龙芯2K1000LA移植交叉编译环境以及QT
嵌入式大赛结束了,根据这次比赛中记的凌乱的笔记,整理了一份龙芯2K1000LA的环境搭建过程,可能笔记缺少了一部分步骤或者错误,但是大致步骤可以当作参考。 一、交叉编译工具链 下载连接:龙芯 GNU 编译工具链 | 龙芯开…...
javaee spring依赖注入之spel方式
spring依赖注入之spel方式 <dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.18.RELEASE</version></dependency>package com.test.pojo;import java.util.List; …...
【Java集合学习1】ArrayList集合学习及集合概述分析
JavaArrayList集合学习及集合学习概述 一、Java集合概述 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Col…...
TouchGFX之调试
DebugPrinter类是一种在显示屏上打印调试消息的简单方法,无需向屏幕添加控件。 在使用DebugPrinter之前,需要分配一个实例并将其传递给Application类,且DebugPrinter实例必须兼容所使用的LCD类。 该表列出了DebugPrinter类名称: …...
C# winform加载yolov8模型测试(附例程)
第一步:在NuGet中下载Yolov8.Net 第二步:引用 using Yolov8Net; 第三步:加载模型 private IPredictor yolov8 YoloV8Predictor.Create("D:\\0MyWork\\Learn\\vs2022\\yolov_onnx\\best.onnx", mylabel); 第四步:图…...
浙大陈越何钦铭数据结构07-图6 旅游规划
题目: 有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。 输入…...
VUE笔记(七)项目登录
1、安装elementui 在终端执行 vue add element 注册组件 如果要使用哪个组件,大家需要在plugins/element.js中注册该组件 import Vue from vue import { Button } from element-ui Vue.use(Button) 在页面组件中使用 <el-button type"primary"&…...
大语言模型之六- LLM之企业私有化部署
数据安全是每个公司不得不慎重对待的,为了提高生产力,降本增效又不得不接受新技术带来的工具,私有化部署对于公司还是非常有吸引力的。大语言模型这一工具结合公司的数据可以大大提高公司生产率。 私有化LLM需要处理的问题 企业内私有化LLM…...
Python3 列表
Python3 列表 序列是 Python 中最基本的数据结构。 序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。 Python 有 6 个序列的内置类型,但最常见的是列表和元组。 列表都可以进…...
OpenCV基础知识(8)— 图形检测
前言:Hello大家好,我是小哥谈。图形检测是计算机视觉的一项重要功能。通过图形检测可以分析图像中可能存在的形状,然后对这些形状进行描绘,例如搜索并绘制图像的边缘,定位图像的位置,判断图像中有没有直线、…...
Java虚拟机
文章目录 JVM运行时数据区域HotSpot虚拟机对象探秘实战:OutOfMemoryError异常 JVM 运行时数据区域 HotSpot虚拟机对象探秘 实战:OutOfMemoryError异常...
c++学习 之 函数重载注意事项
文章目录 引用作为函数重载的条件函数重载遇到默认参数 引用作为函数重载的条件 #include <iostream> using namespace std; void fun(int &a) {cout << "void fun(int & a)" << endl; }void fun(const int &a) {cout << "…...
2023-08-27 LeetCode每日一题(合并区间)
2023-08-27每日一题 一、题目编号 56. 合并区间二、题目链接 点击跳转到题目位置 三、题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组&#…...
C#,数值计算——调适数值积分法(adaptive quadrature)的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 调适数值积分法 /// adaptive quadrature /// </summary> public class Adapt { private double x1 { get; } 0.942882415695480; private …...
微信小程序发布迭代版本后如何提示用户强制更新新版本
在点击小程序发布的时候选择,升级选项 之前用户使用过的再打开小程序页面就会弹出升级弹窗modal...
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
目录 前言 一、删除子弹 二、限制子弹数量 三、继续重构代码 总结 前言 昨天我们已经让子弹飞了起来,但是会面临一个和之前小蜜蜂一样的问题,小蜜蜂的行动应该限制在窗口内,那么子弹也是有相同之处,也需要限制一个移动范围&…...
XMly-Downloader-Qt5:跨平台喜马拉雅音频下载解决方案的技术重构与实现深度解析
XMly-Downloader-Qt5:跨平台喜马拉雅音频下载解决方案的技术重构与实现深度解析 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-…...
【2024独家首发】Red Cabbage印相参数矩阵表:17组实测--no stylize值×--sref权重×色域压缩阈值,精准复现植物染料氧化还原曲线
更多请点击: https://intelliparadigm.com 第一章:Red Cabbage印相的化学机理与Midjourney参数映射原理 花青素的pH响应性与图像显影基础 红甘蓝(Red Cabbage)提取液富含花青素(anthocyanin),…...
InvestorFinder 技术架构深度解析:VC 合伙人真实投资行为数据挖掘与精准匹配底层实现
摘要在一级市场股权投资领域,创业者与风险投资机构合伙人的精准匹配长期存在信息壁垒、数据碎片化、背景信息不对称三大核心痛点。传统投融资对接模式依赖 FA 机构人脉、线下路演、投融资社群人工对接,存在效率低下、匹配维度单一、投资人真实投资行为数…...
AI建站工具推荐:能建站只是开始,实测“全链路变现”才是关键
AI建站工具推荐:能建站只是开始,实测“全链路变现”才是关键 【引言:95%的建站工具都搞错了一件事】 最近我们拆解了市面上17款AI建站工具,发现一个扎心的数据: 超过80%的外贸网站,在上线3个月后依然没有…...
嵌入式Linux开发:手把手教你交叉编译全套WiFi工具链(iwconfig, iw, wpa_supplicant, hostapd)
嵌入式Linux WiFi工具链深度实战:从交叉编译到系统集成 在嵌入式Linux开发中,WiFi功能实现往往是最具挑战性的环节之一。不同于桌面环境,嵌入式设备需要从底层开始构建完整的无线网络栈,这涉及到多个工具的协同工作。本文将带你深…...
Python 爬虫反爬突破:流量指纹伪装规避流量监测
前言 在爬虫反爬对抗体系中,IP 封禁、UA 伪造、验证码拦截属于表层防护,而流量指纹监测是现阶段大中型互联网平台、资讯门户、电商业务系统采用的高阶反爬手段。服务端与网关防火墙会基于全网流量行为、报文特征、连接握手规则、请求时序模型、协议栈特…...
边缘计算中的AI优先设计:从芯片选型到模型部署的实战指南
1. 项目概述:为什么“AI优先”是边缘计算的必然选择 最近和几个做硬件和嵌入式开发的老朋友聊天,话题总绕不开一个词:AIoT。大家的感觉很一致,现在的项目要是没沾点“智能”的边,好像都不好意思拿出手。但真做起来&…...
GPT-5.5批量生成的Prompt工程,别再让模糊指令变成Token烧金窟
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
保姆级教程:在Ubuntu 20.04上用YOLOv5 v6.2训练你自己的COCO数据集(附完整数据准备流程)
在Ubuntu 20.04上从零构建YOLOv5 v6.2自定义训练环境的完整指南 当你想在本地工作站或云服务器上训练自己的目标检测模型时,YOLOv5无疑是最受欢迎的选择之一。但许多教程都假设你已经熟悉了Linux环境配置、数据集处理等前置知识,这让不少初学者在第一步…...
3个关键功能解锁B站缓存视频的永久保存方案
3个关键功能解锁B站缓存视频的永久保存方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经历过这样的场景:精心收藏的B站…...
