当前位置: 首页 > news >正文

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

文章目录

  • 一、自定义模块
    • 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__.pyformatJson.pyopenJson.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开发中常用的工具和技术。

相关文章:

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

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

C#-数组

数组 (array) 是一种包含若干变量的数据结构,这些变量都可以通过计算索引进行访问。数组中包含的变量(又称数组的元素)具有相同的类型,该类型称为数组的元素类型。 数组类型为引用类型,因此数组变量的声明只是为数组实…...

机器学习周刊第二期:300个机器学习应用案例集

大家好 前文:机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源,包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址:https://github.com/Asabeneh/30-Days-Of-Python 30天Python编程挑战是一个逐步学…...

【华为OD机试真题2023CD卷 JAVAJS】中文分词模拟器

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 中文分词模拟器 知识点图字符串 时间限制:5s 空间限制:256MB 限定语言:不限 题目描述: 给定一个连续不包含空格字符串,该字符串仅包含英文小写字母及英文文标点符号(逗号、分号、句号),同时给定词库,对该字符串进…...

基于YOLOv8-pose的画笔关键点(bic_markers)检测

💡💡💡本文解决什么问题:教会你如何用自己的数据集训练Yolov8-pose关键点检测 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_12398833.html ✨✨✨手把手教你从数据标记到生成适合Yolov8-pose的yolo数据集;...

【实用技巧】Windows 电脑向iPhone或iPad传输视频方法1:无线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频,以 iPhone 为例,iPad的操作方法类似,本文不作赘述。 二、所需原材料 Windows 电脑(桌面或其它文件夹中存有要导入的视频)、iPhone 14。 待…...

爬虫实战 - 微博评论数据可视化

简介: 我们都知道在数据比较少的情况下,我们是可以很轻易的获取到数据中的信息。但是当数据比较庞大的时候呢,我们就很难看出来了。尤其是面对现如今数以万计的数据,就更了。 不过好在我们可以通过计算机来帮我们进行分析&#…...

python装饰器嵌套基础

1 python装饰器嵌套基础 python支持装饰器嵌套,即多个装饰器装饰同一个函数或方法。 1.1 嵌套执行顺序 用法 a_deco b_deco c_deco def test_nest_deco():pass描述 a_deco、b_deco、c_deco分别占一行,编写在同一个函数或方法的def语句上方。 从def…...

C语言之三子棋小游戏的应用

文章目录 前言一、前期准备模块化设计 二、框架搭建三、游戏实现打印棋盘代码优化玩家下棋电脑下棋判断输赢 四、结束 前言 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子&#…...

优雅处理并发:Java CompletableFuture最佳实践

第1章:引言 大家好,我是小黑,今天,小黑要和大家聊聊CompletableFuture,这个Java 8引入的强大工具。 在Java传统的Future模式里,咱们都知道,一旦开始了一个异步操作,就只能等它结束…...

熟悉HDFS常用操作

1. 利用Hadoop提供的Shell命令完成下列任务 (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。 #检查文件是否存在./bin/hdfs dfs -test -e text.txt echo $? #结果是1 代表已存在 #根据结果判断出文件已存…...

Adobe XD是什么?探索这款创新的用户体验设计工具

Adobexd是一种基于矢量的设计工具,主要用于设计移动和Web应用程序的用户界面(UI)。与Photoshop或ilustrator等其他Adobe产品相比,它相当轻。对于对快速设计和原型迭代感兴趣的界面设计师来说,轻量级并不是一件坏事。 在早期,Adob…...

java常用应用程序编程接口(API)——ArrayList概述及使用案例

前言: 学习了ArrayList,整理下ArrayList的常用功能及基本案例。打好基础,daydayup! 如果需要了解API是什么并如何使用,可以看这篇文章。 java常用应用程序编程接口(API)——String概述及使用案…...

2024年了,Layui再战三年有问题不?

v2.9.3 2023-12-31 2023 收官。 form 优化 input 组件圆角时后缀存在方框的问题 #1467 bxjt123优化 select 搜索面板打开逻辑,以适配文字直接粘贴触发搜索的情况 #1498 Sight-wcgtable 修复非常规列设置 field 表头选项时,导出 excel 出现合计行错位的…...

消息队列-RocketMQ-概览与搭建

RocketMQ 领域模型 RockeMQ整体结构预览 RocketMQ 中的一些概念 Topic:主题,可以理解为类别、分类的概念 MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic 下有 4 个队…...

Vue3技术解析(小册子)

随着 Vue 3 正式版本的发布,未来 Vue 3 将会成为前端的主流框架,这个毋庸置疑。Vue 3 在使用方面会兼容部分 Vue 2.x 的特性,比如 options API。 所以,究竟是要先学习 Vue 2 打好基础,还是直接学习 Vue 3 呢&#xff…...

即将消失的五种编程语言?

1. Ruby Ruby 在 1999 年发布后立即受到程序员们的热捧,它能够快速构建应用程序的特性给程序员留下了非常深刻的印象。紧随其后,备受欢迎的 Ruby on Rails 框架于 2004 年发布,由于 Ruby 和 Rails 这两个名称在当时几乎成为了同义词&#xf…...

c++学习:STL库(框架)+字符串模板类string+vector容器+list链表

目录 stl库 常用组件包括 字符串库 字符串模板类string 头文件 最常用的字符串模板类 字符串类型 模板原型 模板的成员数据类型 模板成员函数 有些函数会有重载,可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cp…...

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷④

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 模块一 …...

使用Scikit Learn 进行识别手写数字

使用Scikit Learn 进行识别手写数字 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏&#x1f…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...