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

目录

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 addresult = 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_moduleprint(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 addimportlib.reload(add)

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

6. 包(Package)

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

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

my_package/__init__.pymodule1.pymodule2.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 sysprint("命令行参数:", 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 ospath = 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://xiahunao.cn/news/3225996.html

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

相关文章

vue使用 “xlsx-style“: “^0.8.13“ 报错

关于jszip not a constructor报错配置config.js文件后可能还报错的问题: 在node_modules处找到node_modules\xlsx-style\xlsx.js 文件。 将 if(typeof jszip undefined) jszip require(./jszip).JSZip;(应该在xlsx.js文件1339行左右) 替换成 if(typeof jszip und…

二进制安装nexus

今天安装nexus,想看看别人怎么安装的,结果找了一圈,没有一个靠谱的, 有些题目是二进制安装nexus,内容是东家长李家短胡扯,一个字,不要脸; 详细安装步骤如下,一起学习&…

Java 期末速成

其他题 import java.util.*; public class Test {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int arr[] new int[100];int value scanner.nextInt();int s scanner.nextLine(); // 键盘输入多个字符int result 0;System.out.print…

智驭未来:人工智能与目标检测的深度交融

在科技日新月异的今天,人工智能(AI)如同一股不可阻挡的浪潮,正以前所未有的速度重塑着我们的世界。在众多AI应用领域中,目标检测以其独特的魅力和广泛的应用前景,成为了连接现实与智能世界的桥梁。本文旨在…

LangChain教程:构建基于GPT的应用程序

ChatGPT和GPT-4的成功表明,通过使用强化学习训练的大型语言模型,可以构建可扩展且功能强大的自然语言处理应用程序。 然而,响应的有用性取决于提示信息,这导致用户探索了提示工程领域。此外,大多数现实世界的自然语言…

防火墙实验配置

实验要求 1,DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区全天都能访问 2,生产区不允许访问互联网,办公区和游客区允许访问互联网 3,…

echarts——横坐标轴文字过长如何换行

横坐标轴文字过长,想要换行 实现如下效果 具体实现代码如下: axisLabel: {show: true,interval: 0,formatter: function (value) {var ret "";//拼接加\n返回的类目项 var maxLength 4;//每项显示文字个数 var valLength value.length;//X轴类目项…

智慧城市大数据运营中心 IOC:Web GIS 地图应用助力智能决策

利用图扑 HT for Web GIS 技术,智慧城市大数据运营中心 (IOC) 实现动态可视化展示,整合多源数据,提高城市管理和资源分配效率,支持智能决策与实时监控。

【数据结构与算法 经典例题】单值二叉树的判断

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 目录 一、问题描述 二、解题思路 三、C语言实现代码 一、问题描述 如果二叉树…

Linux 防火墙配置指南:firewalld不同服务管理的应用案例(十个)

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作时间&…

nginx正向代理、反向代理、负载均衡

nginx.conf nginx首要处理静态页面 反向代理 动态请求 全局模块 work processes 1; 设置成服务器内核数的两倍(一般不不超过8个超过8个反而会降低性能一般4个 1-2个也可以) netstat -antp | grep 80 查端口号 *1、events块:* 配置影响ngi…

贴脸细看Mixtral 8x7B- 稀疏混合专家模型(MoE)的创新与推动

贴脸细看Mixtral 8x7B- 稀疏混合专家模型(MoE)的创新与推动 原创 一路到底孟子敬 上堵吟 2024年01月15日 20:05 美国 I. 引言 A. Mixtral 8x7B的背景和目的 • 背景:随着大型语言模型在自然语言处理(NLP)领域的广泛…

2024年上海和数集团市场部下半年工作会议圆满召开

2024年6月19日,上海和数集团市场部下半年工作会议在苏州2.5产业园圆满召开! 和数研究院院长徐敬东发表了“把握数字经济浪潮”的主题演讲。 徐院长深入分析了当前数字经济的发展趋势,强调了数字技术在推动全球经济增长中的重要作用。 和数集…

Java使用POI导出后数字类型为常规类型,不能计算

今日日常撸码,甲方提出来excel导出后,数字类型那一列是常规类型,并不是数字,无法进行计算,如下图: 这里和导出的字段类型有关,我用的是POI进行excel的导出,需要在实体类上标注出需要…

概率论期末速成(知识点+例题)

考试范围 一: 事件关系运算性质全概率公式、贝叶斯公式古典概型 二: 离散分布律连续密度函数性质 -> 解决三个问题(求待定系数、求概率、求密度函数)分布函数 -> 解决三个问题常用分布(最后一节课的那几个分…

【C++】使用C++实现基于Socket的通信

在本文中,我们将详细讨论如何使用C实现基于Socket的通信,并设计一个TLV(Type-Length-Value)协议用于数据交互。TLV协议因其灵活性和可扩展性,在多种通信协议中被广泛使用,特别是在需要动态定义数据结构的场…

提升Selenium在Chrome上的HTML5视频捕获效果的五个方法

在使用Selenium进行网页自动化测试时,捕获HTML5视频是一个常见的需求。然而,许多开发者发现,在使用Chrome浏览器时,视频捕获效果并不理想,经常出现视频背景为空白的问题。本文将概述五种方法,帮助提升Selen…

边框插画:成都亚恒丰创教育科技有限公司

边框插画:艺术与生活的精致边界 在视觉艺术的广阔天地里,边框插画以其独特的魅力和细腻的表达方式,成为连接艺术与生活的一道精致边界。成都亚恒丰创教育科技有限公司它不仅仅是图像的外框装饰,更是情感、故事与创意的延伸&#…

从天空到地面:无人机航拍推流直播技术在洞庭湖决口封堵中的全方位支援

据新闻报道,受持续强降雨影响,湖南省华容县团洲垸洞庭湖一线堤防发生管涌险情,随后出现决口。截至7月8日20时左右,226米长的洞庭湖一线堤防决口已累计进占208米,目前剩余18米,有望在今晚或9日凌晨实现合龙。…

Geoserver源码解读六 插件

系列文章目录 Geoserver源码解读一 环境搭建 Geoserver源码解读二 主入口 Geoserver源码解读三 GeoServerBasePage Geoserver源码解读四 REST服务 Geoserver源码解读五 Catalog Geoserver源码解读六 插件(怎么在开发模式下使用) 目录 系列文章目…