Python基础(二十二、自定义模块和包)

news2024/11/15 12:10:16

文章目录

  • 一、自定义模块
    • 1.如何自定义模块并导入?
    • 2.`__main__`变量的功能
    • 3.注意事项
  • 二、自定义包
    • 1.什么是Python的包?
    • 2.`__init __.py`文件的作用?
    • 3.`__all__`变量的作用?
    • 4.示例
  • 三、自定义模块和自定义包的好处

一、自定义模块

1.如何自定义模块并导入?

在Python代码文件中正常写代码即可,通过import、from关键字和导入Python内置模块一样导入即可使用。模块的详细使用可以见[Python基础(二十一、模块的使用,else的使用tip)]。(https://blog.csdn.net/qq_35716085/article/details/135453562)
例如:
formatJson.py

def formatJsonReturn(newLine, str, file):
    for line in file:
        if line.strip().startswith(str):
            dict = line.strip().replace('"',"").replace(',',"").replace(' ',"").split(":")[1]
            newLine.append(dict)
    return newLine

openJson.py

import formatJson
def openJson(uri):
    newLine = []
    with open(uri,"r") as file:
        formatJson.formatJsonReturn(newLine, '"title": ',file)
        print(newLine)
    return newLine
openJson("D:/test/demo/articles.json")

openJson导入了formatJson模块

import formatJson

或者

from formatJsonimport formatJsonReturn

2.__main__变量的功能

if__main__==“__main__ ”表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if无法进入
例如:
formatJson.py

def formatJsonReturn(newLine, str, file):
    for line in file:
        if line.strip().startswith(str):
            dict = line.strip().replace('"',"").replace(',',"").replace(' ',"").split(":")[1]
            newLine.append(dict)
    return newLine
if __name__ == "__main__":
    newLine = []
    file = ["test:111"]
    formatJsonReturn(newLine, 'test', file)
    print(newLine)

将formatJson.py增加if __name__ == "__main__",如果直接运行formatJson.py,可以输出:

['111']

但是当其他模块调用该模块时,就不会走到if __name__ == " __main__ "当中,即不会输出[‘111’]。

3.注意事项

printJson.py

def formatJsonReturn(str):
    print(str)

formatJson.py同上不变,下面给openJson.py引入formatJson.py和printJson.py的formatJsonReturn函数。

from formatJson import formatJsonReturn
from printJson import formatJsonReturn
def openJson(uri):
    newLine = []
    with open(uri,"r") as file:
        formatJsonReturn(newLine, '"title": ',file)
        print(newLine)
    formatJsonReturn('"title": ')
    return newLine
openJson("D:/jushu/demo/articles.json")

猜猜会发生什么?
在这里插入图片描述
报错了,因为导入的函数名相同,被后边导入的覆盖了,后导入的参数只有1个,而我写了三个入参~~~

  • 不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的
  • __all__变量可以控制import*的时候哪些功能可以被导入

二、自定义包

1.什么是Python的包?

包就是一个文件夹,里面可以存放许多Python的模块 (代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。

2.__init __.py文件的作用?

创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹。

3.__all__变量的作用?

同模块中学习到的是一个作用,控制 import*能够导入的内容

4.示例

以下是一个示例,演示如何创建一个简单的包及其 __init__.py 文件:

my_package/
	__init__.py
	formatJson.py
	openJson.py

__init__.py 文件中,你可以添加以下内容:

# __init__.py

# 可以在这里导入模块
from .openJson import openJson
from .formatJson import formatJsonReturn
from .formatJson import testJson
# 定义 __all__ 变量
__all__ = ['formatJsonReturn', 'openJson']

这样,在其他模块中导入my_package 包时,即使是import *也只有 openJson和 formatJsonReturn会被导入。这提供了更细粒度的控制,确保只有你想要导出的内容可供其他模块使用。

三、自定义模块和自定义包的好处

  • 模块化和组织性: 自定义模块和包可以将相关的代码组织在一起,使代码更易于管理和维护。通过将功能拆分为多个模块或包,可以提高代码的可读性和可维护性。

  • 代码复用: 自定义模块和包可以在不同的项目中重复使用。通过将通用功能封装为模块或包,可以避免重复编写相同的代码,提高开发效率。

  • 命名空间隔离: 自定义模块和包提供了命名空间的隔离。通过将代码放入不同的模块或包中,可以避免命名冲突,并确保代码之间的相互独立性。

  • 可扩展性: 自定义模块和包可以方便地进行扩展。通过添加新的模块或包,可以向项目中添加新的功能或特性,而无需修改现有代码。

  • 代码共享和交流: 自定义模块和包可以与其他开发者共享和交流。通过将代码打包成模块或包,可以方便地与他人分享自己的代码,促进合作和知识共享。

总的来说,自定义模块和包能够提高代码的组织性、可复用性、可维护性和扩展性,同时也方便代码的共享和交流,是Python开发中常用的工具和技术。

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

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

相关文章

不通过微软商店进行安装 UWP 软件

参考: 不通过微软商店下载安装uwp应用_uwp应用只能去商店下载吗-CSDN博客离线下载和安装UWP(windows应用商店)软件 - 赵青青 - 博客园UWP程序安装正确步骤(例:华硕奥创安装错误200) - 哔哩哔哩 1 前往线上商店,搜索想要安装的应用。 以安装 Microsoft…

sonarqube配置本地扫描代码

一、本地maven设置setting文件&#xff1a; 1&#xff09;添加pluginGroup <pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups> 2&#xff09;添加profile&#xff1a; <profile><id>sonar</i…

python语言在web上的应用:如何节省服务器资源?

背景介绍​ 在web开发中的应用广泛​ 在web开发中的应用广泛。随着互联网的发展&#xff0c;web应用越来越普遍&#xff0c;而Python作为一种简洁、高效的编程语言&#xff0c;被广泛应用于web开发领域。Python提供了丰富的库和框架&#xff0c;如Django、Flask等&#xff0c…

C#,快速排序算法(Quick Sort)的非递归实现与数据可视化

排序算法是编程的基础。 常见的四种排序算法是&#xff1a;简单选择排序、冒泡排序、插入排序和快速排序。其中的快速排序的优势明显&#xff0c;一般使用递归方式实现&#xff0c;但遇到数据量大的情况则无法适用。实际工程中一般使用“非递归”方式实现。 快速排序(Quick Sor…

基于ssm的常见小儿疾病中医护理系统的设计+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本小儿疾病中医护理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

揭秘加密货币周期:如何通过顶级代币指标洞察市场变化

作者&#xff1a;stellafootprint.network 加密生态领域如大海般波涛汹涌&#xff0c;如何在这片海域中稳稳航行&#xff1f;关键在于把握市场周期的脉搏。顶级代币的几个核心指标&#xff0c;正是我们窥探市场周期的窗口。 领先的区块链分析平台跟踪的关键代币指标包括&…

开关电源损耗测量之高压空载测试方法 -纳米软件

开关电源在实际使用过程中会产生损耗&#xff0c;损耗过大会直接影响到开关电源的转换效率和性能&#xff0c;从而导致设备无法正常运行。因此测试开关电源的损耗情况也是非常重要的步骤。 高压空载运行测试用来检测开关电源的损耗情况&#xff0c;在空载情况下&#xff0c;带软…

wps word粘贴excel文件直接打开

第一步 创建空白Word文档 第二步 见下图 插入--对象 然后 选择 来自文件 就这么简单 看到了吗 插进来了

kubernetes RBAC Authentication 详解

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 Kubernetes 安全架构 K8S安全控制框架主要由下面3个阶段进行控制&#xf…

NVIDIA Container Toolkit(NVIDIA Docker)

引言 Nvidia Docker该项目已被NVIDIA Container Toolkit取代。此存储库提供的工具已被弃用&#xff0c;并且该存储库已存档。 nvidia-docker不再支持包装器&#xff0c;并且 NVIDIA Container Toolkit 已进行扩展&#xff0c;允许用户配置 Docker 以使用 NVIDIA Container Ru…

Gravatar头像服务器镜像站搭建

前言 Gravatar是Globally Recognized Avatar的缩写&#xff0c;是gravatar推出的一项服务&#xff0c;意为“全球通用头像”。如果在Gravatar的服务器上放置了你自己的头像&#xff0c;那么在任何支持Gravatar的blog或者留言本上留言时&#xff0c;只要提供你与这个头像关联的…

用Java编写图书网站信息采集程序教程

目录 一、准备工作 二、分析目标网站结构 三、选择信息采集方式 四、安装Jsoup库 五、编写信息采集程序 六、注意事项 总结&#xff1a; 编写图书网站信息采集程序需要掌握HTML、CSS、JavaScript、Java等前端和后端技术。下面是一个简单的教程&#xff0c;介绍如何使用…

【精通C语言】:深入解析for循环,从基础到进阶应用

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C语言详解 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、for循环基础1.1 语法1.2 示例1.3 流程图1.4 for与while的对比 二、for循环进阶2.1 fo…

分布式(5)

目录 22.什么是Paxos算法&#xff1f;如何实现&#xff1f; 24.全局唯一ID有哪些实现方案&#xff1f; 25.数据库方式实现方案&#xff1f;有什么缺陷&#xff1f; 22.什么是Paxos算法&#xff1f;如何实现&#xff1f; Paxos算法是Lamport宗师提出的一种基于消息传递的分布…

全球数据隐私相关专业薪酬趋势

PrimiHub一款由密码学专家团队打造的开源隐私计算平台&#xff0c;专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 数字经济时代&#xff0c;数据已经成为新型生产要素。而数据与其他生产要素的本质区别在于&#xff0c;数据隐私是数据流动过程中…

第5章 对象

学习目标 了解什么是对象&#xff0c;能够说出JavaScript中的对象的概念 掌握对象的创建方式&#xff0c;能够使用3种方式创建对象 掌握对象的遍历&#xff0c;能够遍历对象的属性和方法 熟悉值类型和引用类型&#xff0c;能够说出值类型和引用类型的特点 掌握Math对象的使…

第三代量子计算机交付,中国芯片开辟新道路,光刻机难挡中国芯

日前安徽本源量子宣布第三代超导量子计算系统正式上线&#xff0c;这是中国最先进的量子计算机&#xff0c;计算量子比特已达到72个&#xff0c;在全球已居于较为领先的水平&#xff0c;这对于中国芯片在原来的硅基芯片受到光刻机阻碍无疑是巨大的鼓舞。 据悉本源量子的第一代、…

QT应用篇:QT解析与生成XML文件的四种方式

四种常见的解析 XML 的方式(DOM、SAX、以及基于 Qt 的 XmlStreamReader)各有自己的优缺点,适合不同的应用场景。 DOM 适合小型且结构简单的 XML 文件,需要频繁修改和操作整个文档结构的情况。SAX 适合大型 XML 文件,以及只需读取不需要修改的情况。基于 Qt 的 XmlStreamRe…

以太坊开发者会议回顾:坎昆升级、硬分叉与布拉格

作者&#xff1a;Christine Kim Galaxy研究副总裁 编译&#xff1a;秦晋 碳链价值 2024年1月4日&#xff0c;以太坊开发人员齐聚Zoom for All Core Developers Execution (ACDE) Call #178 上。ACDE电话会议通常由以太坊基金会协议负责人Tim Beiko主持&#xff0c;是一个开发人…

Databend 开源周报第 127 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解 Databend …