【模块化与包管理】:解锁【Python】编程的高效之道

news2025/2/26 6:18:13

目录

1.什么是模块?

2. 模块的导入过程

3. 理解命名空间

4. import语句的多种形式

5. 模块的执行与重新导入

6. 包(Package)

7. sys模块和os模块

sys模块

常用属性

示例:使用sys模块

os模块

常用功能

示例:使用os模块获取环境变量

总结


专栏:python学习笔记 

上一篇:python异常处理

1.什么是模块?

模块的定义与基本概念 模块是包含一组相关功能的Python代码文件。将代码拆分为多个模块,可以提高代码的可读性和可维护性。模块通常以.py文件形式存在,并通过import语句在其他Python文件中使用。

模块的优点 模块化编程具有以下几个优点:

  • 代码复用:通过模块,可以在不同项目中重复使用相同的代码,提高开发效率。
  • 结构清晰:将代码拆分为模块,可以使项目结构更加清晰,便于管理和维护。
  • 命名空间隔离:每个模块都有独立的命名空间,避免命名冲突。

示例:创建和使用模块 下面我们通过一个简单的例子来创建和使用模块。

  • 创建一个名为add.py的模块文件,其中包含一个用于加法运算的函数。
    # add.py - 模块文件
    def add(a, b):
        return a + b
    
  • 创建一个名为main.py的文件,导入并使用add模块。
    # main.py - 使用模块
    import add
    
    result = add.add(1, 2)
    print(result)  # 输出:3
    

小李的理解 如果把所有的代码都写在一个文件里,不仅代码看起来杂乱无章,还很难找到具体的功能。把相关功能的代码放到一个模块里,就像把工具分门别类地放在不同的盒子里,想用的时候直接去对应的盒子拿,既方便又整洁。”

2. 模块的导入过程

模块的搜索路径 Python解释器在导入模块时,会按照特定的搜索路径查找模块文件。这些路径存储在sys.path中,可以根据需要进行修改。

查看默认搜索路径

修改搜索路径 我们可以通过sys.path.append()方法动态添加新的搜索路径。

import sys
sys.path.append('/path/to/module')

import my_module

小李的理解 Python就像一个人需要去不同的地方找东西一样,默认情况下,它会去一些常用的地方找模块。我们可以告诉Python去其他地方找,这样就能灵活地使用不同位置的代码。

3. 理解命名空间

命名空间的概念 命名空间是一个用来区分不同标识符的容器。每个模块都有独立的命名空间,从而避免命名冲突。

示例:避免命名冲突 假设我们有两个不同的模块math_module.pystring_module.py,它们都包含一个名为add的函数。通过模块导入,我们可以避免函数名冲突。

# math_module.py
def add(a, b):
    return a + b

# string_module.py
def add(a, b):
    return a + b

# main.py
import math_module
import string_module

print(math_module.add(1, 2))  # 输出:3
print(string_module.add('Hello', 'World'))  # 输出:HelloWorld

小李的理解 “如果所有人都叫‘小明’,那叫人就会很混乱。给每个人一个独特的名字,就能避免混淆。Python通过模块名来区分同名的函数,就像每个人都有自己的独特名字。”

4. import语句的多种形式

单个模块导入 最常见的import语句形式是导入单个模块。

import os

多个模块导入 可以在一行代码中同时导入多个模块。

import os, sys

使用别名导入 通过import ... as ...语句,可以为模块起一个别名,简化代码书写。

import os.path as p
print(p.exists('test.py'))

部分导入 通过from ... import ...语句,只导入模块中的某个特定功能。

全部导入(不推荐) 虽然可以通过from ... import *语句导入模块中的所有内容,但不推荐使用这种方式,因为它可能导致命名冲突。

from os.path import *

小李的理解 :import语句就像去超市购物。有时候只买一件东西(单个模块导入),有时候买几样东西(多个模块导入),有时候记不住名字就起个外号(使用别名导入),有时候只买某个品牌的特定商品(部分导入)。不过,一次把所有东西都搬回家(全部导入)可能会导致家里乱成一团。

5. 模块的执行与重新导入

模块的执行 导入模块时,模块中的顶层代码会被执行。顶层代码是指没有缩进的部分代码,通常包括函数定义和全局变量的定义。

示例:模块的执行

# add.py
print('模块被导入')

def add(a, b):
    return a + b

# main.py
import add

重新导入模块 可以使用importlib.reload函数重新导入模块,以便在代码更新时无需重启程序。 

import importlib
import add

importlib.reload(add)

小李的理解 :当他第一次导入模块时,模块里的所有顶层代码都会被执行,就像打开一本书时会先读一下目录。而重新导入模块就像重新打开书看看有没有新的内容。

6. 包(Package)

包的概念 包是用于组织模块的文件夹,通过层次结构将多个模块组合在一起。包中必须包含一个__init__.py文件,以标识该文件夹是一个包。

示例:包的结构 下面是一个简单的包结构示例:

my_package/
    __init__.py
    module1.py
    module2.py

 使用包中的模块 可以通过包名和模块名导入包中的模块。

from my_package import module1

运行结果 

如果module1.py包含以下内容:

# module1.py
def func():
    print("这是module1中的函数")

那么运行以下代码:

from my_package import module1
module1.func()

小李的理解 包就像一个装满书的书架,而模块就是书架上的书。每本书都有自己的名字(模块名),书架也有自己的标签(包名)。这样一来,无论书有多少,都能轻松找到。

7. sys模块和os模块

sys模块

sys模块提供了对Python解释器相关信息和功能的访问,是一个非常重要的基础模块。

常用属性

  • sys.argv:命令行参数
  • sys.path:模块搜索路径
  • sys.version:Python版本信息

示例:使用sys模块

import sys

print("命令行参数:", sys.argv)
print("模块搜索路径:", sys.path)
print("Python版本:", sys.version)
E:\python\python模块\.venv\Scripts\python.exe E:\python\python模块\main.py 
命令行参数: ['E:\\python\\python模块\\main.py']
模块搜索路径: ['E:\\python\\python模块', 'E:\\python\\python模块', 'E:\\python\\PyCharm 2024.1.2\\plugins\\python\\helpers\\pycharm_display', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0\\python312.zip', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0\\DLLs', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0\\Lib', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0', 'E:\\python\\python模块\\.venv', 'E:\\python\\python模块\\.venv\\Lib\\site-packages', 'E:\\python\\PyCharm 2024.1.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
Python版本: 3.12.4 (tags/v3.12.4:8e8a4ba, Jun  6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)]

进程已结束,退出代码为 0

os模块

os模块提供了与操作系统进行交互的功能,涵盖文件和目录操作、环境变量管理等。

常用功能

  • os.getenv:获取环境变量
  • os.path:处理文件和路径
  • os.system:执行系统命令

示例:使用os模块获取环境变量

import os

path = os.getenv('PATH')
print("环境变量PATH:", path)
环境变量PATH: E:\python\python濡�虫健\.venv\Scripts;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\dotnet\;E:\C C++\;D:\Git\cmd;D:\bin;E:\runtime\win64;E:\bin;"C:\Program Files\Java\jdk-22"\bin;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;E:\Python\Scripts\;E:\Python\;C:\Users\Lenovo\AppData\Local\Microsoft\WindowsApps;C:\Users\Lenovo\.dotnet\tools;C:\C璇█瀛︿範\Microsoft VS Code\bin;E:\python\PyCharm Community Edition 2024.1.2\bin;E:\python\PyCharm 2024.1.2\bin;E:\VS code\Microsoft VS Code\bin;E:\JAVA璇█\IntelliJ IDEA 2024.1.4\bin

进程已结束,退出代码为 0

小李的理解sys模块和os模块就像一对好兄弟,sys模块负责管理程序的内在信息,比如命令行参数和搜索路径;os模块则负责和外部环境打交道,比如处理文件和执行系统命令.

总结

Python中的模块和包是管理和组织代码的重要工具。模块是包含一组相关功能的Python代码文件,具有代码复用、结构清晰和命名空间隔离的优点。模块的导入通过import语句进行,Python解释器会按照特定的搜索路径查找模块文件。通过模块的命名空间可以避免命名冲突。import语句有多种形式,包括单个模块导入、多个模块导入、使用别名导入和部分导入。导入模块时,顶层代码会被执行,可以使用importlib.reload函数重新导入模块。包是用于组织模块的文件夹,必须包含一个__init__.py文件,包可以解决模块之间的名字冲突问题。sys模块和os模块是Python中非常重要的基础模块,sys模块提供对Python解释器相关信息的访问,而os模块提供与操作系统交互的功能。

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

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

相关文章

asan检测内存泄漏

文章目录 前言初始代码链接asan动态库静态方式链接额外说明小结 前言 ASAN是一个内存问题检测工具 类似的还有valgrind, 但是valgrind运行时会占用非常多的内存 初始代码 #include<stdio.h> #include"arcojson.h"int leak_func() {arco_json* jtest new_js…

复兴社在李忠平的引领下,奋力实现伟大复兴

李忠平&#xff0c;河北保定人&#xff0c;1965年6月生&#xff0c;现任中国财政科学研究院公共资产研究中心副主任副研究员和复兴社会长。他的一生充满了奋斗与奉献&#xff0c;为实现共同富裕和中华民族的伟大复兴而不断努力。复兴社在他的领导下&#xff0c;正走在一条坚定而…

【Python】已解决:SyntaxError invalid syntax

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SyntaxError invalid syntax 一、分析问题背景 在Python编程中&#xff0c;SyntaxError: invalid syntax是一个常见的错误&#xff0c;它通常表示代码中存在语法…

【机器学习】必会数学知识:一文掌握数据科学核心数学知识点(下),收藏~

核心数学知识点 1、引言2、数据科学必会数学知识2.13 K均值聚类2.14 决策树2.15 随机森林2.16 梯度下降2.17 随机梯度下降&#xff08;SGD&#xff09;2.18 卷积2.19 拉普拉斯变换2.20 傅里叶变换2.21 信息论2.22 时间序列分析2.23 生成模型与判别模型2.24 支持向量机&#xff…

无刷电机带上驱动器,掉电外力拖动有阻力

无刷电机带上驱动器&#xff0c;掉电外力拖动有阻力 这个问题一直以为很好理解或者应该是总所周知的&#xff0c;但是竟然很多人好奇问专门做电机控制的工程师&#xff0c;但是竟然很多人说不明白&#xff0c;今天我就好好聊一聊。 原因 反电动势效应 当无刷电机在没有电源供…

市场营销新手入门:推荐5本让你快速成长的好书!

我过去面试过数千人&#xff0c;发现了一个非常有趣也让人担忧的现象&#xff1a; 无论是资深还是资浅的市场营销人士&#xff0c;如果被问及什么是市场营销&#xff0c;什么是品牌&#xff0c;什么是整合营销传播&#xff0c;市场营销组合与整合营销传播有什么区别&#xff0…

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…

matlab数值溢出该怎么解决?

&#x1f3c6;本文收录于《CSDN问答解惑》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

Backend - C# 的日志Lognet4

目录 一、安装 log4net 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、配置 &#xff08;一&#xff09;配置AssemblyInfo.cs &#xff08;二&#xff09;配置log4net.config 1. 创建log4net.config文件&#xff08…

【京东监控项目分享】JD电商可实现的商品价格SKU实时监控

笔者实现了一个京东商品价格和评论的采集监控系统&#xff0c;它具有以下功能。 可以在任意时间周期内按照一定时间间隔&#xff0c;采集任意指定商品的价格和最新评论&#xff0c;都是网页可见的公开数据&#xff0c;不包含任何隐私数据。 对于消费者来说&#xff0c;如果订阅…

《C++20设计模式》策略模式

文章目录 一、前言二、实现1、UML类图2、实现 一、前言 策略模式和状态模式实现方式一样&#xff0c;只是目的不同&#xff0c;如果会状态模式的这个也就可以随便看看啦。 相关代码可以在这里&#xff0c;如有帮助给个star&#xff01;AidenYuanDev/design_patterns_in_moder…

RocketMQ-六大场景实操指南

RocketMQ-六大场景实操指南 普通消息创建Topic创建Group测试消息收发 定时消息创建Topic创建Group消息发送 事务消息创建Topic创建Group消息收发 顺序消息创建Topic创建Group消息收发 另外两大场景消息异常运维体验感受初次体验给小白新手的建议进阶体验应用场景 关于云消息队列…

Excel第28享:如何新建一个Excel表格

一、背景需求 小姑电话说&#xff1a;要新建一个表格&#xff0c;并实现将几个单元格进行合并的需求。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“XLS工作表”或“XLSX工作表”都可以&#xff0c;如下图所示。 之后&…

持安科技CEO何艺荣获中国信通院2023-2024年度标准卓越贡献奖

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会承办的“全球数字经济大会—云和软件安全论坛”暨“2024第二届SecGo云和软件安全大会”胜利召开&#xff0c;零信任办公安全技术创新企业持安科技创始人兼CEO何艺获评为2023-2024年度零信任领域标准卓越贡献者。 由中…

华盈生物获得美国Akoya认证的PhenoCycler-Fusion(原CODEX)技术服务商

华盈生物获得美国Akoya认证的PhenoCycler-Fusion&#xff08;原CODEX&#xff09;技术服务商 华盈生物获得美国Akoya公司认证的PhenoCycler-Fusion&#xff08;原CODEX&#xff09;空间单细胞蛋白组技术服务商&#xff0c;并进入该技术的全球CRO服务提供者网络&#xff1a;htt…

获超九成Gartner用户力推!FortiGate连续五年斩获“客户之选”称号

近日&#xff0c;Gartner Peer Insights™ 网络防火墙客户之选报告发布&#xff0c;Fortinet 连续第五年荣登这项权威榜单。该评选结果源于广大用户对 Fortinet 防火墙产品的真实反馈&#xff0c;是客户选择 Fortinet 的重要参考依据&#xff0c;也是FortiGate能够占据全球防火…

Spark-RDD和共享变量

概览 每个Spark应用程序都由一个driver program 组成&#xff0c;该驱动程序运行我们编写的main函数&#xff0c;并在集群上执行各种 并行 操作。Spark提供的主要抽象是一个 弹性分布式数据集&#xff08;RDD&#xff09;&#xff0c;它是一个跨集群节点分区的元素集合&#x…

Win-ARM联盟的端侧AI技术分析

Win-ARM联盟&#xff0c;端侧AI大幕将起 微软震撼发布全球首款AI定制Windows PC——Copilot PC&#xff0c;搭载全新NPU与重塑的Windows 11系统&#xff0c;纳德拉盛赞其为史上最快、最强、最智能的Windows PC。该设备算力需求高达40TOPS&#xff0c;支持语音翻译、实时绘画、文…

AI网络爬虫019:搜狗图片的时间戳反爬虫应对策略

文章目录 一、介绍二、输入内容三、输出内容一、介绍 如何批量爬取下载搜狗图片搜索结果页面的图片?以孙允珠这个关键词的搜索结果为例: https://pic.sogou.com/pics? 翻页规律如下: https://pic.sogou.com/napi/pc/searchList?mode=2&start=384&xml_len=48&am…

基于Android平台开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…