【模块化与包管理】:解锁【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://www.rhkb.cn/news/373579.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 【 PCL 】点云添加随机均匀噪声及源代码

PCL向点云添加均匀随机噪声&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/random.h>int main() {// 加载点云文件pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::Poi…

android deep links即scheme uri跳转以及googlePlay跳转配置

对于googlePlay的Custom URL就是googlePlay上APP网址&#xff1a; https://play.google.com/store/apps/details?idcom.yourapp如果是国内一些应用&#xff0c;则考虑market://包名等方式&#xff0c;自行百度。 对于Android URI Scheme&#xff1a; 首先需要在Manifest xm…

Win11常用快捷键整理,带你重启电脑体验(动图演示)

名人说&#xff1a;人生到处知何似&#xff0c;应似飞鸿踏雪泥。 ——苏轼《和子由渑池怀旧》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、常用快捷键1、Win X2、Win Q3、Win E4、Win T5、Win Tab6、W…

国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践

亚马逊云科技(AWS)是全球云行业最&#x1f525;火的云平台&#xff0c;在全球经济形势不好的大背景下&#xff0c;通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书&#xff0c;对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥&#xff0c;及时了解世界最前…

Go 中的类型推断

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

商城源码从哪里找

商城源码可以从多个渠道获取&#xff0c;具体包括开源平台、专门的商城系统提供商、代码分享网站等。不同的渠道可能适合不同的需求和技术水平。下面将详细分析各个渠道的特点及优缺点&#xff1a; 开源平台 Gitee&#xff1a;Gitee是一个知名的代码托管平台&#xff0c;提供…

Git本地仓库的搭建与使用

目录 一、前言 二、Linux下搭建 git 仓库 三、Windows下搭建 git 仓库 一、前言 做项目时&#xff0c;我们常常需要将自己的代码进行托管&#xff0c;但有时候 Github 的速度属实叫人流泪。有的人会选择 Gitee 等进行托管代码&#xff0c;这当然是可以的。那如果没有其他代码…

怎么判断自己是否适合学习PMP?

判断自己是否适合学习PMP项目管理专业人士认证&#xff0c;可以从以下几个方面进行考量&#xff1a; 1、职业发展需求&#xff1a; 如果您在项目管理领域工作&#xff0c;或计划未来从事相关工作&#xff0c;PMP认证能显著提升您的竞争力。 对于项目经理、产品经理、技术领导…

LabVIEW中使用 DAQmx Connect Terminals作用意义

该图展示了如何在LabVIEW中使用 DAQmx Connect Terminals.vi 将一个信号从一个源端口连接到一个目标端口。这种处理有以下几个主要目的和作用&#xff1a; 同步操作&#xff1a; 在多任务、多通道或多设备系统中&#xff0c;可能需要不同的组件在同一时刻执行某些操作。通过将触…

【LLM大模型】机器学习导论(西瓜书)[推荐阅读]

哈喽啊大家&#xff0c;今天又来给大家推荐一本机器学习方面的书籍<机器学习西瓜书>。本书作为该领域的入门教材&#xff0c;在内容上尽可能涵盖机器学习基础知识的各方面。 为了使尽可能多的读者通过本书对机器学习有所了解&#xff0c;作者试图尽可能少地使用数学知识…

李良济“小儿推拿妈妈班”圆满结课,以中医智慧守护儿童健康成长!

孩子生场病&#xff0c;妈妈半条命&#xff01;作为妈妈最害怕的就是孩子生病&#xff0c;自己又无能为力&#xff01; 为了帮助妈妈们&#xff0c;正确应对孩子健康问题&#xff0c;日常生活中科学帮助孩子提升体质少生病&#xff01; 参加此次课程的&#xff0c;不仅有妈妈&a…

【开源】基于RMBG的一键抠图与证件照制作系统【含一键启动包】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Python】已解决:(paddleocr导包报错)ModuleNotFoundError: No module named ‘paddle’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;&#xff08;paddleocr导包报错&#xff09;ModuleNotFoundError: No module named ‘paddle’ 一、分析问题背景 近日&#xff0c;一些使用PaddleOCR库进行文字…

windwos下mysql的udf提权

MySql UDF提权介绍 UDF(User Defined Functions)即用户自定义函数&#xff0c;通过这种方式可以实现命令执行&#xff0c;其原理是通过lib_mysqludf_sys提供的函数可以执行系统命令 攻击场景:同之前利用日志写WebShell的场景&#xff0c;即堆叠注入或MySQL终端权限或类似phpMy…

关于《中国PostgreSQL考试认证体系》通知

为响应国家大数据战略发展的号召&#xff0c;进一步推动PostgreSQL开源数据库在国内的快速发展&#xff0c;加强PostgreSQL 数据库相关人才培养&#xff0c;由政府相关部门批准发起&#xff0c;组成中国PostgreSQL认证考试中心及PostgreSQL 中国大学&#xff0c;旨在共同规范和…

【保姆级介绍下C语言中的运算符的优先级】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

必看 | 最简单获取IP地址专用SSL证书的申请方法

申请IP地址专用的SSL证书并不像传统SSL证书那样普及&#xff0c;不是所有服务商都提供IP地址的SSL证书&#xff0c;因此需要仔细选择合适的服务商和流程进行操作申请&#xff0c;以此来实现IP地址访问的https。以下是最简单的IP地址专用SSL证书申请方法&#xff1a; 一、准备 …

防火墙组网

一、实验拓扑图 二、实验要求 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;可以访问&#xff0c; 生产区的设备全天可以访问。 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网。 3、办…

LabVIEW中自定义Ring控件的图标

在LabVIEW中&#xff0c;自定义Ring控件的图标可以让用户界面更加直观和友好。以下是如何在LabVIEW中自定义Ring控件的图标的详细步骤&#xff1a; 步骤1&#xff1a;创建或获取图标 首先&#xff0c;你需要创建或获取你想要在Ring控件中使用的图标。你可以使用图像编辑软件&…

排序——数据结构与算法 总结8

目录 8.1 排序相关概念 8.2 插入排序 8.2.1 直接插入排序&#xff1a; 8.2.2 折半插入排序&#xff1a; 8.2.3 希尔排序&#xff1a; 8.3 交换排序 8.3.1 冒泡排序&#xff1a; 8.3.2 快速排序&#xff1a; 8.4 选择排序 8.4.1 简单选择排序 8.4.2 堆排序 8.5 归并…