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

《Effective Python》第2章 字符串和切片操作——深入理解 Python 中 __repr__ 与 __str__

引言

本文基于学习《Effective Python》第三版 Chapter 2: Strings and Slicing 中的 Item 12: Understand the Difference Between repr and str When Printing Objects 后的总结与延伸。在 Python 中,__repr____str__ 是两个与对象打印密切相关的魔术方法,它们决定了对象在不同场景下的字符串表示形式。无论是调试代码、记录日志,还是在交互式终端中查看对象,理解这两者的区别都至关重要。本文不仅总结了书中的核心要点,还结合实际应用场景、常见误区以及个人思考,力求为读者提供深入的思考。

在 Python 的世界中,__repr____str__ 就像是对象的“名片”和“自我介绍”:一个面向开发者,追求精确和可重现;另一个面向用户,注重可读性和直观性。通过本文,你将全面掌握这两者的设计理念、实现方法、应用场景以及高级用法。文章将从定义入手,逐步展开实现细节、案例分析和扩展思考,适合希望深入理解 Python 对象表示的开发者阅读。


__repr____str__ 的定义与设计理念

问题:__repr____str__ 的本质是什么?它们为何被设计为两种不同的方法?

定义与作用
在 Python 中,__repr____str__ 是两个用于定义对象字符串表示的特殊方法(也称为魔术方法)。它们分别由内置函数 repr()str() 调用,决定了对象在打印或转换为字符串时的表现形式。简单来说:

  • __str__:为对象提供人类友好的、可读的字符串表示,通常用于 print()str() 调用。
  • __repr__:为对象提供详细的、面向开发者的字符串表示,通常用于调试或 repr() 调用,理想情况下应能重现对象。

设计理念的差异
Python 的设计哲学强调“明确优于隐晦”,__repr____str__ 的分离正是这一理念的体现。__repr__ 的目标是提供一种无歧义的表示,开发者可以通过 eval(repr(obj)) 尽可能还原对象;而 __str__ 则更注重用户体验,输出的字符串应简洁直观。例如,Python 的内置 datetime 对象就是一个经典案例:

import datetime
now = datetime.datetime.now()
print(str(now))   # 输出:2025-05-12 10:30:45.123456(人类友好)
print(repr(now))  # 输出:datetime.datetime(2025, 5, 12, 10, 30, 45, 123456)(可重现)

生活化比喻
可以将 __repr__ 比作一张详细的“名片”,包含对象的完整信息(如类名、属性值),适合开发者在调试时快速了解对象状态;而 __str__ 则像一段简短的“自我介绍”,只突出关键信息,适合展示给普通用户。想象你在派对上介绍自己:对朋友,你可能说“我是小明,爱跑步和读书”;但对程序员同事,你会说“我是小明,Python 开发者,熟悉 Django 和 Flask”。

常见误区
一个常见的误区是认为 __str__ 总是比 __repr__ 更重要,因此只实现 __str__。实际上,__repr__ 是 Python 的默认回退机制:如果 __str__ 未定义,print() 会调用 __repr__。因此,优先实现 __repr__ 是更稳妥的做法。


实现 __repr____str__ 的最佳实践

问题:如何为自定义类实现 __repr____str__?有哪些关键注意事项?

实现的基本原则
在《Effective Python》中,Item 12 强调:为自定义类实现 __repr____str__ 时,应确保 __repr__ 提供详细、准确的表示,而 __str__ 提供简洁、易读的表示。以下是一个简单的示例,展示如何为一个 Point 类实现这两个方法:

class Point:def __init__(self, x, y):self.x = xself.y = ydef __repr__(self):return f'Point({self.x}, {self.y})'def __str__(self):return f'({self.x}, {self.y})'# 测试代码
p = Point(3, 4)
print(repr(p))  # 输出:Point(3, 4)
print(str(p))   # 输出:(3, 4)

实现细节分析

  1. ** __repr__ 的设计**:在上面的代码中,__repr__ 返回的字符串包含类名和属性值,格式类似构造函数调用。这种设计便于开发者通过 eval(repr(p)) 重建对象(尽管并非所有对象都能完美重现)。
  2. ** __str__ 的设计**:__str__ 返回一个简化的坐标表示,去掉了类名,适合直接展示给用户。
  3. 回退机制:如果未定义 __str__,Python 会调用 __repr__ 作为替代。因此,总是实现 __repr__ 是最佳实践。

流程图:Python 打印对象时的调用逻辑
以下是 Python 调用 __repr____str__ 的逻辑流程:

调用 print(obj) 或 str(obj)
是否存在 __str__ 方法?
调用 __str__
调用 __repr__
返回字符串
返回字符串

注意事项与误区

  • 避免过于冗长__repr__ 虽需详细,但不应包含无关信息,如临时状态或无关属性。
  • 保持一致性:在团队项目中,建议为所有类定义统一的 __repr__ 格式(如始终包含类名和关键属性)。
  • 调试优先:忽略 __repr__ 的实现可能导致调试困难。例如,默认的 __repr__ 输出 <__main__.Point object at 0x7f8b2c0> 几乎无用。

实际应用场景与案例分析

问题:在哪些场景下会优先调用 __repr____str__?如何利用它们提升开发效率?

场景 1:调试与交互式终端
在调试代码或使用 Python 的交互式终端(如 REPL)时,__repr__ 是主角。当你直接输入对象名并按回车,Python 会调用 repr() 显示结果。例如:

p = Point(3, 4)
p  # 输出:Point(3, 4)

这种详细表示对开发者非常有用,尤其是在检查复杂对象时。相比之下,print(p) 调用 __str__,输出更简洁的 (3, 4)

场景 2:日志记录
在日志系统中,__str__ 通常用于生成用户友好的日志消息,而 __repr__ 适合记录详细状态。例如:

import logging
logging.basicConfig(level=logging.INFO)
logging.info(f"Point created: {p}")  # 输出:Point created: (3, 4)
logging.debug(f"Point details: {repr(p)}")  # 输出:Point details: Point(3, 4)

这里,__str__ 让日志更简洁,而 __repr__ 提供调试所需的细节。

案例分析:数据库 ORM 对象
假设你正在开发一个使用 SQLAlchemy 的 Web 应用,定义了一个 User 模型:

class User:def __init__(self, id, name, email):self.id = idself.name = nameself.email = emaildef __repr__(self):return f'User(id={self.id}, name={self.name!r}, email={self.email!r})'def __str__(self):return f'User: {self.name} ({self.email})'# 测试代码
u = User(1, "Alice", "alice@example.com")
print(u)        # 输出:User: Alice (alice@example.com)
print(repr(u))  # 输出:User(id=1, name='Alice', email='alice@example.com')

在这个例子中,__str__ 提供简洁的用户信息,适合前端展示;__repr__ 则包含完整属性,方便调试数据库查询结果。

常见误区

  • 忽视 __repr__ 的调试价值:许多开发者只实现 __str__,导致调试时难以快速了解对象状态。
  • 格式不统一:在大型项目中,不同类的 __repr__ 格式差异过大可能增加维护成本。

思考

问题:__repr____str__ 如何与其他魔术方法协作?如何在大型项目中优化对象表示?

与其他魔术方法的关系
__repr____str__ 并非孤立存在,它们与 __format__ 等方法共同构成了 Python 的字符串表示体系。例如,__format__ 允许自定义格式化字符串(如 f-strings 中的 {obj:.2f})。在 Python 3.6+ 中,f-strings 的普及(参考 Item 11)进一步提升了字符串表示的灵活性。例如:

class Point:def __init__(self, x, y):self.x = xself.y = ydef __format__(self, format_spec):if format_spec == 'polar':import mathr = math.sqrt(self.x**2 + self.y**2)theta = math.atan2(self.y, self.x)return f'({r:.2f}, {theta:.2f} rad)'return str(self)p = Point(3, 4)
print(f'{p:polar}')  # 输出:(5.00, 0.93 rad)

大型项目中的一致性策略
在大型项目中,建议制定统一的 __repr____str__ 实现规范。例如:

  • 使用标准模板__repr__ 始终返回 ClassName(attr1=value1, attr2=value2) 格式。
  • 利用工具:Python 的 dataclasses 模块可以自动生成 __repr__,减少重复代码:
from dataclasses import dataclass@dataclass
class Point:x: floaty: floatdef __str__(self):return f'({self.x}, {self.y})'p = Point(3, 4)
print(repr(p))  # 输出:Point(x=3, y=4)
print(p)        # 输出:(3, 4)

扩展思考

  • 性能考量:在高性能场景下,频繁调用 __repr____str__ 可能成为瓶颈。可以通过缓存字符串表示来优化。
  • 国际化支持__str__ 的输出可能需要根据语言环境调整,需与 locale 模块结合。
  • 生态工具:框架如 Pydantic 和 attrs 也提供了类似的自动表示功能,值得探索。

总结

通过对《Effective Python》Item 12 的学习,我们深入理解了 __repr____str__ 的核心区别:__repr__ 面向开发者,追求精确和可重现;__str__ 面向用户,注重简洁和可读性。在实现时,优先定义 __repr__ 作为回退机制,并根据场景优化 __str__ 的输出。实际应用中,这两个方法在调试、日志记录和用户界面展示中各有侧重,合理设计能显著提升开发效率。

希望这篇文章能帮助你更好地掌握 __repr____str__,并在 Python 开发中提升代码质量与效率!后续我会继续分享更多关于《Effective Python》精读笔记系列,参考我的代码库 effective_python_3rd,一起交流成长!

相关文章:

《Effective Python》第2章 字符串和切片操作——深入理解 Python 中 __repr__ 与 __str__

引言 本文基于学习《Effective Python》第三版 Chapter 2: Strings and Slicing 中的 Item 12: Understand the Difference Between repr and str When Printing Objects 后的总结与延伸。在 Python 中&#xff0c;__repr__ 和 __str__ 是两个与对象打印密切相关的魔术方法&am…...

C及C++的SOAP协议库

一.gSOAP gSOAP 是一个功能强大的开源工具包&#xff0c;专为 C 和 C 设计&#xff0c;用于快速开发基于 SOAP 协议的 Web 服务和客户端。 1.协议支持 SOAP 版本&#xff1a;完整支持 SOAP 1.1/1.2 规范&#xff0c;包括消息格式、编码规则和错误处理。 传输协议&#xff1a…...

推荐一个Winform开源的UI工具包

从零学习构建一个完整的系统 推荐一个开源、免费的适合.NET WinForms 控件的套件。 项目简介 Krypton是一套开源的.Net组件&#xff0c;用于快速构建具有丰富UI交互的WinForms应用程序。 丰富的UI控件&#xff0c;提供了48个基础控件&#xff0c;如按钮、文本框、标签、下拉…...

【Linux内核】内存管理之虚拟内存详解

目录 一、Linux 虚拟内存概述 二、虚拟内存的基本概念 1. 地址空间 2. 页表 3. 页面 三、虚拟内存的管理机制 1. 页面分配与回收 2. 页面置换 3. 内存映射 四、虚拟内存的保护机制 1. 访问权限 2. 写时复制 五、虚拟内存的优化技术 1. 大页 2. 透明大页 3. 内存…...

upload-labs通关笔记-第5关 文件上传之.ini绕过

目录 一、ini文件绕过原理 二、源码审计 三、渗透实战 1、查看提示 2、制作.user.ini文件 &#xff08;1&#xff09;首先创建一个文本文件 &#xff08;2&#xff09;保存文件名为.user.ini 2、制作jpg后缀脚本 &#xff08;1&#xff09;创建一个文本文件 &#xf…...

入门OpenTelemetry——部署OpenTelemetry

OpenTelemetry 部署模式 OpenTelemetry Collector 按部署方式分为 Agent 和Gateway 模式。 Agent 模式 在 Agent 模式下&#xff0c;OpenTelemetry 检测的应用程序将数据发送到与应用程序一起驻留的&#xff08;收集器&#xff09;代理。然后&#xff0c;该代理程序将接管并…...

构建现代化WPF应用:数据驱动开发与高级特性解析

启动时默认打开哪个界面是在App.xaml的StartupUri属性中设置。 Window标签 x:Class起到了部分类的作用&#xff0c;让XAML与CS文件做关联&#xff0c;起到了映射的作用。 xmlns是XML NameSpace的简称&#xff0c;起到了命名控件的作用&#xff0c;与代码中命名空间不同的是&a…...

MATLAB实现振幅调制(AM调制信号)

AM调制是通信专业非常重要的一个知识点。今天我们使用MATLAB编程实现AM调制。 我们实现输入一个载波信号的频率与调制信号的频率后&#xff0c;再输入调幅度&#xff0c;得到已调信号的波形与包络信号的波形&#xff0c;再使用FFT算法分析出已调信号的频谱图。 源代码&#x…...

loss = -F.log_softmax(logits[:, -1, :], dim=1)[0, irrational_id]

loss = -F.log_softmax(logits[:, -1, :], dim=1)[0, irrational_id] 解释这行代码 loss = -F.log_softmax(logits[:, -1, :], dim=1)[0, irrational_id] 的具体含义和背后的数学原理。 1. 代码拆解与功能 这行代码的核心是计算负对数似然损失(Negative Log Likelihood Los…...

NSSCTF [HNCTF 2022 WEEK4]

题解前的吐槽&#xff1a;紧拖慢拖还是在前段时间开始学了堆的UAF(虽然栈还没学明白&#xff0c;都好难[擦汗])&#xff0c;一直觉得学的懵懵懂懂&#xff0c;不太敢发题解&#xff0c;这题算是入堆题后一段时间的学习成果&#xff0c;有什么问题各位师傅可以提出来&#xff0c…...

基于springboot+vue的医院门诊管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 系统登录 系统首…...

大模型越狱:技术漏洞与安全挑战——从原理到防御

近年来&#xff0c;随着大模型能力的飞速提升&#xff0c;其安全性问题日益受到关注。其中&#xff0c;“大模型越狱”&#xff08;Model Jailbreaking&#xff09;成为热议焦点——指通过特定手段绕过模型的安全限制&#xff0c;诱导其生成有害、违法或超出设计范围的内容。本…...

Linux 常用命令 -hostnamectl【主机名控制】

简介 hostnamectl 命令中的 “hostname” 顾名思义&#xff0c;指的是计算机在网络上的名称&#xff0c;“ctl” 是 “control” 的缩写&#xff0c;意味着控制。hostnamectl 命令用于查询和修改系统主机名以及相关的设置。它通过与 systemd 系统管理器交互&#xff0c;允许用…...

《Python星球日记》 第72天:问答系统与信息检索

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、问答系统概述1.问答系统的工作原理2. 问答系统的典型应用场景 二、问答系统…...

VUE3 -综合实践(Mock+Axios+ElementPlus)

目录 前言 目标 1.工程创建 2.Mock 2.1 配置Mock 扩 展 2.2 定义模拟数据 2.3 创建Mock服务器 3.导入ElementPlus 4.表格页面搭建 5.动态路由跳转 6.详情页面的制作 前言 基于前文 VUE3详细入门&#xff0c;我们对VUE3的基本使用有了初步的了解&#xff0c;下…...

Qt原型模式实现与应用

在Qt中实现原型模式&#xff08;Prototype Pattern&#xff09;可以通过以下步骤完成。该模式的核心是通过克隆现有对象来创建新对象&#xff0c;而非通过传统的构造函数。以下是详细说明和示例&#xff1a; 1. 原型模式的核心概念 目的&#xff1a;避免重复初始化对象的高成本…...

语音识别-2

上一篇关于语音识别, 虽然能用,但在系统适配,机器适配方面,速度,性能等还是有优化的地方.所以这篇是关于这些的. 1.蓝牙优化 A2DP:是一种单向的高品质音频数据传输链路,通常用于播放立体声音乐;SCO: 则是一种双向的音频数据的传输链路,该链路只支持8K及16K单声道的音频数据…...

ElasticSearch深入解析(十二):聚合——分桶聚合、指标聚合、管道子聚合

文章目录 一、分桶聚合1. 分桶聚合的核心逻辑与核心类型2. 分桶聚合的高级特性 二、指标聚合1. 指标聚合的核心逻辑与基础类型&#xff08;1&#xff09;基础统计指标&#xff08;单值输出&#xff09;&#xff08;2&#xff09;复合统计指标&#xff08;多值输出&#xff09; …...

互联网大厂Java求职面试:AI内容生成平台下的高并发架构设计与性能优化

互联网大厂Java求职面试&#xff1a;AI内容生成平台下的高并发架构设计与性能优化 场景背景&#xff1a; 郑薪苦是一名经验丰富的Java开发者&#xff0c;他正在参加一家匿名互联网大厂的技术总监面试。这家公司专注于基于AI的内容生成平台&#xff0c;支持大规模用户请求和复杂…...

论MCU如何在Fatfs中使用Flash接口的方法

前提&#xff1a; MCU移植了FS&#xff0c;如FATFSOSFMount工具 OSFMount或者其他磁盘工具用于挂载.img镜像&#xff0c;可格式化文件系统打开并放入实际使用的文件 步骤 1. cmd命令建立空.img镜像&#xff0c;以下为12MB fsutil file createnew fat.img 120000002. OSFMo…...

Python+Selenium爬虫:豆瓣登录反反爬策略解析

1. 引言 在当今互联网时代&#xff0c;数据抓取&#xff08;爬虫&#xff09;技术广泛应用于数据分析、市场调研、自动化测试等领域。然而&#xff0c;许多网站采用动态加载技术&#xff08;如Ajax、React、Vue.js等框架&#xff09;来渲染页面&#xff0c;传统的**<font s…...

nt!MiDispatchFault函数分析之第一次循环前后的变化

第一部分&#xff1a;nt!MiDispatchFault函数分析之第一次循环之前 1: kd> !pte 0x002bf810 VA 002bf810 PDE at C0300000 PTE at C0000AFC contains 7B314867 contains 00000000 pfn 7b314 ---DA--UWEV not valid 1: kd> dd C0000AFC…...

JMeter性能测试工具使用

JMeter是一款强大的性能测试工具&#xff0c;由Java编写&#xff0c;小巧轻便&#xff0c;最关键的是开源免费&#xff0c;现在已经成了主流的性能测试工具。 下面介绍一下基本的安装使用、高级功能及可视化实时图表展示&#xff0c;带你们感受一下JMeter的世界~ 1、安装 1.…...

Windows 环境下安装 Node 和 npm

安装 Node.js 和 npm https://nodejs.org/zh-cn/download 执行 fnm install 22 之后&#xff0c;执行 node 或 npm 提示找不到命令 fnm env 看环境变量 找到 node 和 npm 命令在 C:\Users\HUAWEI\AppData\Roaming\fnm\node-versions\v22.15.0\installation 目录下&#xff0…...

开发指南112-样式的优先级别

在前端样式设置里&#xff0c;界面元素一般会多个地方进行定义和影响。一般而言&#xff0c;CSS样式的优先级如下&#xff1a; ‌1、内联样式‌&#xff1a;style属性中定义的样式&#xff0c;具有最高的优先级。 ‌2、ID选择器‌&#xff1a;通过ID选择器指定的样式&#xff…...

单向通信机制EventSource

EventSource 是浏览器提供的一种实现服务器推送 简称 SSE 基于 HTTP 协议的单向通信机制 可以通过服务器将实时数据推送到客户端 而不需要客户端不断发起请求EventSource 和 WebSocket 都可以实现服务器向客户端的实时数据推送&#xff0c;但它们有不同的适用场景&#xff1a;E…...

PyTorch中mean(dim=1)的深度解析

mean(dim=1) 是什么意思 在自然语言处理中,文本经过分词器处理后会转换为token序列,每个token对应一个向量表示。mean(dim=1) 的作用是在序列维度上对这些向量取平均,将整个序列压缩为单个向量。下面我用具体例子解释: 1. 张量的维度结构 假设我们有一个输入文本:"…...

Xcode报错:“Set `maskView` to `nil` before adding it as a subview of ZFMaskView

Assertion failure in -[ZFMaskView _addSubview:positioned:relativeTo:] 嗯&#xff0c;坑爹的IOS18&#xff0c;当你基于UIView实现的自己的子类中定义一个属性并初始化时就会出现崩溃&#xff01; /// 遮罩property (nonatomic, strong) UIView *maskView; 因为UIVIEW本…...

uniapp -- 验证码倒计时按钮组件

jia-countdown-verify 验证码倒计时按钮组件 一个用于发送短信验证码的倒计时按钮组件&#xff0c;支持自定义样式、倒计时时间和文本内容。适用于各种需要验证码功能的表单场景。 代码已经 发布到插件市场 可以自行下载 下载地址 特性 支持自定义按钮样式&#xff08;颜色、…...

e.g. ‘django.db.models.BigAutoField‘.

在Django框架中&#xff0c;django.db.models.BigAutoField 是一个用于数据库模型的字段类型&#xff0c;它用于自动增长的ID字段。这个字段类型特别适用于需要处理大量数据的应用&#xff0c;比如在大型网站或应用中&#xff0c;普通的 AutoField 可能不足以存储增长的ID值&am…...

【​​HTTPS基础概念与原理​】对称加密与非对称加密在HTTPS中的协作

在HTTPS通信中&#xff0c;对称加密和非对称加密协同工作&#xff0c;共同保障数据的机密性和密钥交换的安全性。以下是两者的协作机制及RSA、ECDHE等算法的核心作用&#xff1a; 一、对称加密与非对称加密的分工 1. 对称加密&#xff08;如AES、ChaCha20&#xff09; • 作用&…...

ESP系列单片机选择指南:结合实际场景的最优选择方案

前言 在物联网(IoT)快速发展的今天&#xff0c;ESP系列单片机凭借其优异的无线连接能力和丰富的功能特性&#xff0c;已成为智能家居、智慧农业、工业自动化等领域的首选方案。本文将深入分析各款ESP芯片的特点&#xff0c;结合典型应用场景&#xff0c;帮助开发者做出最优选择…...

使用Thrust库实现异步操作与回调函数

使用Thrust库实现异步操作与回调函数 在Thrust库中&#xff0c;你可以通过CUDA流(stream)来实现异步操作&#xff0c;并在适当的位置插入回调函数。以下是如何实现的详细说明&#xff1a; 基本异步操作 Thrust本身并不直接暴露CUDA流接口&#xff0c;但你可以通过以下方式使…...

【Python 异常处理】

Python 的异常处理机制是构建健壮程序的核心工具&#xff0c;通过 try-except 结构实现优雅的错误管理。以下是系统化指南&#xff1a; 一、基础异常处理结构 try:# 可能出错的代码result 10 / 0 except ZeroDivisionError:# 异常处理逻辑print("错误&#xff1a;除数不…...

40:相机与镜头选型

第一章 相机 1.1 理论基础 1.1.1 相机分类 1 &#xff09;按照芯片类型&#xff1a; CCD 相机、 CMOS 相机 2 &#xff09;按照传感器的结构特性&#xff1a;线阵相机、面阵相机 3 &#xff09;按照扫描方式&#xff1a;隔行扫描相机、逐行扫描相机 4 &#xff09;按…...

【ESP32-S3】Guru Meditation Error 崩溃分析实战:使用 addr2line 工具 + bat 脚本自动解析 Backtrace

【ESP32-S3】Guru Meditation Error 崩溃分析实战&#xff1a;使用 addr2line 工具 bat 脚本自动解析 Backtrace 在使用 ESP32-S3 进行开发时&#xff0c;我们常常遇到串口报错&#xff0c;例如&#xff1a; Guru Meditation Error: Core 1 paniced (LoadProhibited). Exce…...

win11 VSCode 强制弹窗微软登录

今天在一台新电脑上配置VSCode同步的时候&#xff0c;用了微软账号&#xff0c;因为这台电脑比较特殊&#xff0c;不方便科学上网&#xff0c;所以一开始用的微软账户登录&#xff0c;导致和GitHub账号登录的配置、扩展等等不同步。 后面准备改用GitHub账号登录发现不行&#…...

Thrust库中的Gather和Scatter操作

Thrust库中的Gather和Scatter操作 Thrust是CUDA提供的一个类似于C STL的并行算法库&#xff0c;其中包含两个重要的数据操作&#xff1a;gather(聚集)和scatter(散开)。 Gather操作 Gather操作从一个源数组中按照指定的索引收集元素到目标数组中。 函数原型&#xff1a; t…...

springboot + mysql8降低版本到 mysql5.7

springboot mysql8降低版本到 mysql5.7 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency>spring:datasource:driverClassName: com.mysql.jdbc.D…...

在 Windows 中配置使用 WSL 来运行 Linux 环境,主要有以下步骤:

一、安装 WSL 方法一&#xff1a;使用 wsl --install 命令 &#xff1a;以管理员身份运行 PowerShell 或 Windows 命令提示符&#xff0c;输入 wsl --install 命令&#xff0c;该命令将自动启用运行 WSL 所需的功能&#xff0c;并安装默认的 Linux 发行版 Ubuntu。 方法二&…...

TypeScript泛型:从入门到精通的全方位指南

TypeScript泛型&#xff1a;从入门到精通的全方位指南 前言 最近在社区看到很多小伙伴对TypeScript的泛型概念感到困惑。作为一名从Java转战前端的老兵&#xff0c;我想用最接地气的方式&#xff0c;带大家彻底搞懂这个看似高深实则简单的重要特性。 一、什么是泛型&#xf…...

DA14531如何在固件中生成与时间相关的mac和版本号

一. 蓝牙device information service显示固件编译时间 这里我是用序列号的characteristic来显示。 只需要把序列号的characteristic value用宏的方式&#xff1a; #define APP_DIS_SERIAL_NB_STR (__DATE__" "__TIME__) #define APP_DIS_SERIAL_NB_STR…...

内存安全设计方案

内存安全设计方案 1. 内存问题分析 1.1 常见内存问题 内存泄漏: 单例对象持有过多引用缓存未及时清理线程池资源未释放内存溢出: 大对象频繁创建队列积压并发处理不当GC频繁: 对象创建过多内存碎片化大对象分配1.2 问题场景 #mermaid-svg-uPgkoDPv6GNGT28v {font-family:&…...

免费Ollama大模型集成系统——Golang

Ollama Free V2 Web 功能实现&#xff1a;界面交互与后端逻辑 一、Web 界面概述 Ollama Free V2 的 Web 界面提供了丰富的交互功能&#xff0c;包括模型选择、图片上传、历史记录查看等。界面使用 Bootstrap 进行布局&#xff0c;结合 JavaScript 实现动态交互。 二、前端界…...

工具学习_模糊测试

定义&#xff1a;模糊测试&#xff08;fuzz testing, fuzzing&#xff09;是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中&#xff0c;并监视程序异常&#xff0c;如崩溃、断言失败&#xff0c;以发现可能的程序错误&#xff0c;比如内存泄漏。…...

AI智能分析网关V4周界入侵检测算法精准监测与智能分析,筑牢周界安全防线

一、方案背景​ 随着安全防范需求的不断提升&#xff0c;传统周界安防系统存在误报率高、响应迟缓、智能化程度低等问题&#xff0c;难以满足现代化安全管理的要求。AI智能分析网关V4集成先进的人工智能算法与高性能计算能力&#xff0c;能够实现对周界区域的精准监测与智能分…...

ubuntu20.04系统搭建k8s1.28集群-docker作为容器运行时

ubuntu系统搭建 ubuntu-22.04.5-desktop-amd64.iso映像文件--->实际却是20.4focal版本。 【安装过程没有特别指出的默认回车下一步】 【用户和密码设置】 【网络连接】 【在vmware上安装的话&#xff0c;网络配置如下】【在vm里配置选择nat或者桥接即可】 【国内源配置】&…...

安全合规检查开源项目ComplianceAsCode/content详解及操作系统新产品开发适配指南

I. ComplianceAsCode/content简介 A. 项目使命及其在自动化合规中的重要性 ComplianceAsCode/content项目致力于为各类操作系统发行版和产品提供安全与合规内容。该项目的核心目标是促进自动化安全扫描和配置验证,从而取代传统的手动审计方法,这与日益增长的“合规即代码”…...

Jmeter -- JDBC驱动连接数据库超详细指南

数据库性能决定应用成败&#xff01;高峰期&#xff0c;慢查询拖垮系统&#xff1f;并发用户激增导致连接超时&#xff1f;这些问题让开发者头疼不已。Apache JMeter作为性能测试神器&#xff0c;不仅能测试Web应用&#xff0c;还能直连数据库&#xff0c;模拟多用户负载&#…...

R利用spaa包计算植物/微生物的生态位宽度和重叠指数

一、生态位宽度 生态位宽度指数包括shannon生态位指数和levins生态位指数。下面是采用levins方法计算生态位宽度。method也可以选择“shannon”。 二、生态位重叠指数 生态位重叠指数&#xff0c;包括levins生态位重叠指数、schoener生态位重叠指数、petrai…...