Pydantic v2 的使用
一、前言
Pydantic 是一个 Python 数据验证 和 设置管理 库,使用 Python 类型 注解。具有以下特点:
1.1 核心功能
- 数据验证:自动验证数据类型和约束条件
- 类型转换:自动将输入数据转换为声明类型
- Schema 生成:自动生成 JSON Schema
1.2 主要优势
- 使用直观,基于类型注解
- 与 FastAPI 继承
- 优秀的错误处理机制
1.3 常见使用场景
- API 请求/响应验证
- 配置管理
- 数据序列化/反序列化
- 数据库模型验证
二、基础用法
2.1 基本模型使用
from typing import Optional, List
from datetime import datetime
from pydantic import BaseModelclass User(BaseModel):id: int # 必填字段name: str = "Jack" # 有默认值,选填字段signup_ts: Optional[datetime] = Nonefriends: List[int] = [] # 列表元素是 int 类型 或者可以直接转化成 int 类型external_data = {"id": "123","signup_ts": "2022-12-22 12:00","friends": [1, 2, "3"]
}# 实例化
user = User(**external_data)
print(user.id, user.friends)
print(repr(user))
print(user.model_dump()) # 2.0 中 dict 修改为 model_dump"""
输出
123 [1, 2, 3]
User(id=123, name='Jack', signup_ts=datetime.datetime(2022, 12, 22, 12, 0), friends=[1, 2, 3])
{'id': 123, 'name': 'Jack', 'signup_ts': datetime.datetime(2022, 12, 22, 12, 0), 'friends': [1, 2, 3]}
"""
2.2 类型注解
from typing import Union, List, Dict
from pydantic import BaseModel, constr, Fieldclass Product(BaseModel):name: constr(min_length=1, max_length=50)price: float = Field(gt=0)tags: List[str] = []metadata: Dict[str, Union[str, int]] = {}data = {"name": "Apple","price": 8999,"tags": ["时尚", "优雅"],"metadata": {"types": "Pro","price": 19999}
}product = Product(**data)
print(product.model_dump())
三、新特性
3.1 计算字段
@computed_field 的作用
- @computed_field 是 Pydantic V2 引入的新特性,用于声明一个字段为“计算字段”。
- 计算字段不会直接存储在模型实例中,而是根据其他字段的值动态计算。
- 在序列化时,计算字段会被包含在模型的输出中(例如,当调用 .model_dump() 或 .dict() 方法时)
from pydantic import computed_field, BaseModelclass Rectangle(BaseModel):width: floatheight: float@computed_fielddef area(self) -> float:return self.width * self.height
width
和height
: 表示矩形的宽度和高度,类型为浮点数 (float)。area
: 使用@computed_field
装饰器定义的计算字段,表示矩形的面积。- 计算逻辑:area = width * height。
- 返回值类型为 float。
案例使用
# 创建一个矩形对象
rectangle = Rectangle(width=5.0, height=3.0)# 访问计算字段 area
print(rectangle.area) # 输出: 15.0# 更新矩形的宽度和高度
rectangle.width = 10.0
rectangle.height = 4.0# 再次访问计算字段 area
print(rectangle.area) # 输出: 40.0# 将模型转换为字典
rectangle_dict = rectangle.model_dump()
print(rectangle_dict)# 输出:
# {'width': 10.0, 'height': 4.0, 'area': 40.0}# 将模型转换为 JSON 格式
rectangle_json = rectangle.model_dump_json()
print(rectangle_json)# 输出:
# {"width": 10.0, "height": 4.0, "area": 40.0}
3.2 字段验证器
- field_validator: 验证单个字段的装饰器(Pydantic V2 中使用)。
- model_validator: 验证整个模型的装饰器(Pydantic V2 中使用)。
from pydantic import field_validator, model_validatorclass Order(BaseModel):items: List[str]total: float@field_validator('total')def validate_total(cls, v):if v < 0:raise ValueError('Total must be positive')return v@model_validator(mode='after')def validate_order(self) -> 'Order':if not self.items and self.total > 0:raise ValueError('Cannot have total without items')return self
- @field_validator(‘total’): 这是一个字段级别的验证器,专门验证 total 字段。
- @model_validator(mode=‘after’): 这是一个模型级别的验证器,在所有字段验证完成后执行
案例使用
# 创建一个有效的订单
order = Order(items=["item1", "item2"], total=100.0)
print(order.model_dump())# 输出
# {'items': ['item1', 'item2'], 'total': 100.0}验证负数 total
try:invalid_order = Order(items=["item1"], total=-50.0)
except ValueError as e:print(e)# 输出:
# Total must be positive# 验证没有商品但有总价的情况
try:invalid_order = Order(items=[], total=50.0)
except ValueError as e:print(e)# 输出:
# Cannot have total without items# 验证空订单
valid_order = Order(items=[], total=0.0)
print(valid_order)# 输出:
# items=[] total=0.0
四、高级特性
4.1 泛型模型
from typing import Generic, TypeVar
from pydantic import BaseModelT = TypeVar("T")class Response(BaseModel, Generic[T]):code: intdata: Tmessage: strclass User(BaseModel):id: intname: strclass UserResponse(Response[User]):pass
Generic
和TypeVar
: 来自 Python 的typing
模块,用于定义泛型类型TypeVar('T')
:定义一个类型变量T
,表示可以是任意类型Generic[T]
:表示一个泛型类,允许使用类型变量T
Response
:是一个泛型类,继承了BaseModel
和Generic[T]
- 泛型参数
T
表示data
字段的类型,可以是任意类型(例如int
,str
,自定义类等) data
:表示响应的数据,类型为泛型T
案例使用
# 创建一个 User 对象
user = User(id=1, name="Alice")# 创建一个 UserResponse 对象
response = UserResponse(code=200, data=user, message="Success")# 打印响应对象
print(response)# 输出:
# code=200 data=User(id=1, name='Alice') message='Success'# 转换为字典
response_dict = response.model_dump()
print(response_dict)# 输出:
# {'code': 200, 'data': {'id': 1, 'name': 'Alice'}, 'message': 'Success'}# 转换为 JSON
response_json = response.model_dump_json()
print(response_json)# 输出:
# {"code": 200, "data": {"id": 1, "name": "Alice"}, "message": "Success"}
总结
-
泛型类的作用
- 使用
Generic
和TypeVar
可以定义通用的数据模型,适用于多种数据类型
- 使用
-
适用场景
- API 响应:统一的响应格式
- 不同类型的
data
4.2 自定义类型
from pydantic import GetCoreSchemaHandler, BaseModel
from pydantic_core import core_schema
from typing_extensions import Annotated, Anyclass Color:def __init__(self, value: str):self.value = value@classmethoddef __get_pydantic_core_schema__(cls, _source_type: type[Any],_handler: GetCoreSchemaHandler) -> core_schema.CoreSchema:# 使用 Pydantic 提供的 core_schema.str_schema 方法创建验证规则return core_schema.str_schema(pattern="^#[0-9a-fA-F]{6}$")# 定义类型别名
ColorType = Annotated[str, Color]
GetCoreSchemaHandler
: Pydantic 提供的一个工具,用于动态生成核心模式(Core Schema)。CoreSchema
: Pydantic Core 的核心模式定义,用于描述数据验证逻辑。Annotated
: 来自 typing_extensions 模块,用于为类型添加元数据或额外的行为。- get_pydantic_core_schema 是 Pydantic 的特殊方法,用于定义自定义类型的验证逻辑。
- 这里的逻辑是:
- 验证输入是否是一个字符串 (type=‘str’)。
- 字符串必须符合正则表达式 ^#[0-9a-fA-F]{6}$,即以 # 开头的 6 位十六进制颜色值(如 #FFFFFF 或 #123abc)
- 这里的逻辑是:
- 使用 Annotated 将 str 类型与 Color 类关联起来。这样,ColorType 表示一个字符串类型,但会使用 Color 类中定义的验证逻辑。
案例使用
-
在 Pydantic 模型中使用 ColorType
from pydantic import BaseModelclass Product(BaseModel):name: strcolor: ColorType
- 定义了一个 Product 模型,其中 color 字段使用了 ColorType。
- color 字段的值会被验证为符合 # 开头的 6 位十六进制颜色值。
-
创建有效对象
# 创建一个有效的 Product 对象 product = Product(name="Laptop", color="#FFFFFF") print(product)# 输出: # name='Laptop' color='#FFFFFF'
-
验证无效颜色值
try:invalid_product = Product(name="Laptop", color="INVALID")
except ValueError as e:print(e)
4.3 嵌套模型
from pydantic import BaseModel
from typing import Listclass Address(BaseModel):street: strcity: strcountry: strclass User(BaseModel):name: straddress: Addressalternate_addresses: List[Address] = []
案例使用
创建 User 对象
# 创建主地址和备用地址
main_address = Address(street="123 Main St", city="New York", country="USA")
alt_address1 = Address(street="456 Elm St", city="Los Angeles", country="USA")
alt_address2 = Address(street="789 Oak St", city="Chicago", country="USA")# 创建用户对象
user = User(name="Alice",address=main_address,alternate_addresses=[alt_address1, alt_address2]
)# 打印用户对象
print(user)"""
输出name='Alice' address=Address(street='123 Main St', city='New York', country='USA') alternate_addresses=[Address(street='456 Elm St', city='Los Angeles', country='USA'), Address(street='789 Oak St', city='Chicago', country='USA')]
"""
访问嵌套字段
# 访问主地址的城市
print(user.address.city) # 输出: New York# 访问备用地址的第一个地址的街道
print(user.alternate_addresses[0].street) # 输出: 456 Elm St
序列化为字典或 JSON
user_dict = user.model_dump()
print(user_dict)# 转换为 JSON
user_json = user.model_dump_json(indent=4)
print(user_json)
4.4 ORM 模型
from pydantic import BaseModel, constr
from typing import List
from sqlalchemy import Column, Integer, String
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.orm import declarative_base # 更新导入路径Base = declarative_base()# ORM 模型
class CompanyOrm(Base):__tablename__ = "companies"id = Column(Integer, primary_key=True, nullable=False)public_key = Column(String(20), index=True, nullable=False, unique=True) # 修正拼写错误name = Column(String(63), unique=True)domains = Column(ARRAY(String(255)))# Pydantic 模型
class CompanyMode(BaseModel):id: intpublic_key: constr(max_length=20) # 修正拼写错误name: constr(max_length=63)domains: List[constr(max_length=255)]class Config:from_attributes = True # 替代 orm_mode = True# 测试数据
co_orm = CompanyOrm(id=123,public_key="footbar", # 修正拼写错误name="Testing",domains=["example.com", "imooc.com"]
)# 将 ORM 对象转换为 Pydantic 模型
print(CompanyMode.model_validate(co_orm).model_dump()) # 使用 model_validate 方法
五、数据验证
5.1 基础数据验证
from pydantic import EmailStr, conint, confloat, Field
from pydantic import BaseModelclass Employee(BaseModel):email: EmailStrage: conint(ge=18, le=65)salary: confloat(gt=0)department: str = Field(pattern='^[A-Z]{2,}$')
- email: 表示员工的电子邮件地址,类型为 EmailStr,会自动验证是否符合电子邮件格式。
- age: 表示员工的年龄,类型为整数 (int),并使用 conint 约束其范围:
- ge=18: 年龄必须大于或等于 18。
- le=65: 年龄必须小于或等于 65。
- salary: 表示员工的薪水,类型为浮点数 (float),并使用 confloat 约束其范围:
- gt=0: 薪水必须大于 0。
- department: 表示员工所属部门,类型为字符串 (str),并通过 Field 添加正则表达式约束:
- pattern=‘1{2,}$’: 部门名称必须由至少两个大写字母组成。
5.2 自定义验证
from pydantic import ValidationErrorclass Transaction(BaseModel):amount: floatcurrency: str@field_validator('currency')def validate_currency(cls, v):if v not in ['USD', 'EUR', 'GBP']:raise ValueError('Invalid currency')return v.upper()
- @field_validator(‘currency’):
- 这是一个字段级别的验证器,专门用于验证 currency 字段。
- 如果 currency 不在允许的列表 [‘USD’, ‘EUR’, ‘GBP’] 中,则抛出 ValueError 异常,提示 “Invalid currency”。
- 如果验证通过,则将 currency 转换为大写形式并返回。
六、序列化
6.1 Json 处理
from pydantic import BaseModel
from typing import Dict, Any
from datetime import datetimeclass Config(BaseModel):name: strdata: Dict[str, Any]class Config:json_encoders = {datetime: lambda v: v.isoformat()}# 序列化
config = Config(name="test", data={"time": datetime.now()})
json_str = config.model_dump_json()
print(json_str)
# 反序列化
config = Config.model_validate_json(json_str)
print(config)
6.2 导出选项
from pydantic import BaseModel, Fieldclass User(BaseModel):id: intpassword: stremail: strclass Config:json_schema_extra = {"example": {"id": 1,"password": "secret","email": "user@example.com"}}
- Config 类:
- json_schema_extra 是一个配置选项,用于在生成 JSON Schema 时添加额外的信息。
- 在这里,我们提供了一个示例数据结构(example),包含字段 id、password 和 email 的示例值。
案例使用
# 创建用户对象
user = User(id=1, password="secret", email="user@example.com")# 打印用户对象
print(user)
# 排除字段
print(user.model_dump(exclude={'password'}))
A-Z ↩︎
相关文章:
Pydantic v2 的使用
一、前言 Pydantic 是一个 Python 数据验证 和 设置管理 库,使用 Python 类型 注解。具有以下特点: 1.1 核心功能 数据验证:自动验证数据类型和约束条件类型转换:自动将输入数据转换为声明类型Schema 生成:自动生成…...
从零开始学A2A二 : A2A 协议的技术架构与实现
A2A 协议的技术架构与实现 学习目标 技术架构掌握 深入理解 A2A 协议的分层架构设计掌握各层次的功能和职责理解协议的工作原理和数据流 实现能力培养 能够搭建基本的 A2A 服务端掌握客户端开发方法实现智能体间的有效通信 架构设计理解 理解与 MCP 的本质区别掌握多智能体协…...
设计模式每日硬核训练 Day 12:装饰器模式(Decorator Pattern)完整讲解与实战应用
🔄 回顾 Day 11:适配器模式小结 在 Day 11 中,我们学习了适配器模式(Adapter Pattern): 用于将“不兼容”的接口适配为目标接口,解决新旧系统之间的桥接问题。强调“接口兼容、外部桥接”&…...
[CMake] CMakePresets.json简单使用
解决的问题 CMakePresets.json是为了解决在使用命令行编译使用CMake的项目时,可能会十分麻烦。如类似的参数-DCMAKE_BUILD_TYPEDebug所以有了CMakePresets.json来配置configure和build时的命令,然后在使用时 cmake --preset<configure-preset-name&…...
智能办公如何创建e10流程
智能办公如何创建e10流程 配置e10流程前,您要做的事情: 1、进入e10管理后台,创建应用,开放接口权限;2、进入e10管理后台,配置千里聆套件,配置同步人员;3、进入千里聆系统ÿ…...
Mac关闭sip方法
Mac关闭sip方法 导航 文章目录 Mac关闭sip方法导航完整操作流程图详细步骤 完整操作流程图 这东西是我在网上搬运下来的,但是我在为业务实操过程中,根据实操情况还是有新的注意点的 详细步骤 1.在「关于本机」-「系统报告」-「软件」;查看SIP是否开启…...
Flutter 播放利器:`media_kit` 的详细介绍与使用指南
在 Flutter 项目中实现音视频播放,开发者过去主要依赖如 video_player、just_audio 等第三方库,但这些库或多或少存在一些局限性,比如平台兼容性差、定制能力不足、播放格式有限等问题。 而 media_kit 是近年崛起的一款全平台音视频播放解决…...
GEO优化中的关键底座:知识图谱如何提升生成式AI的准确性与实时性?
今天,我将与大家分享如何通过GEO优化(生成式人工智能优化)和动态知识图谱,帮助企业提升智能化水平并实现高效的业务运营。首先,GEO优化利用生成式AI为企业提供内容生成、客服自动化和智能销售等服务,而知识…...
案例 - 登录认证:保障系统安全访问的实现
摘要:本文介绍了为Tlias智能学习辅助系统添加登录认证功能的过程,涵盖从需求分析、接口文档设计,到思路分析、功能开发以及最后的测试等多个关键环节,旨在实现只有通过登录认证的用户才能安全访问后台系统功能的目标。 关键词&am…...
Node.js Session 原理简单介绍 + 示例代码
目录 ✅ Session 原理简要说明 🧩 示例项目 - 使用 Node.js Express 实现简单 Session 登录 📁 文件结构 🔹 server.js (JavaScript) 🔸 index.html (HTML) ▶️ 程序运行步骤 ✅ 程序运行效果 🎯 总结 在 We…...
C# 类型、存储和变量(C#程序是一组类型声明)
本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 C#程序是一组类型声明 如果广泛地描述C和C程序源代码的特征,可以说C程序是一组函数和数据…...
复变函数摘记3
复变函数摘记3 5. 留数5.1 可去奇点、极点、本性奇点5.2 零点与极点的关系5.3 在无穷远点处的情形5.4 留数 5. 留数 \quad 如果函数 f ( z ) f(z) f(z) 在 z 0 z_0 z0 及 z 0 z_0 z0 的邻域内处处可导,那么称 f ( z ) f(z) f(z) 在点 z 0 z_0 z0 处解析。…...
深入定制 QSlider——实现精准点击跳转与拖拽区分
在使用 Qt 编写界面应用时,QSlider 是一个常用的滑动控件。但你可能会注意到,默认情况下点击滑轨(groove)区域时,滑块并不会直接跳到鼠标点击的位置,而是按照内部的分页步进(page step)行为响应。此外,垂直 Slider 在点击最底部时还存在 releaseEvent(或 sliderRelea…...
Summary
一、数据结构 1.1 哈希 主要是HashMap和HashSet;其中HashSet底层是一个HashMap属性。 // 获取HashMap元素,HashSet均不支持 map.keySet (); // Set<k> map.values (; // Collection<V> map.entrySet();//Set<Map.Entry<K,V>> for (Map.E…...
MCP Server 开发实战 | 大模型无缝对接 Grafana
前言 随着大模型的飞速发展,越来越多的 AI 创新颠覆了过往很多产品的使用体验。但你是否曾想过,在向大型语言模型提问时,它能否根据你的需求精准返回系统中的对应数据?例如,当用户查询 Grafana 服务时,模型…...
【ROS2】行为树 BehaviorTree(六):各种各样的节点
1、装饰器节点 Decorators 1)否操作 Inverter 如果子项失败则返回 SUCCESS,如果子项成功则返回 FAILURE。 如果子节点返回 RUNNING,则该节点也返回 RUNNING。 2)强制成功 ForceSuccess 如果子节点返回 RUNNING,则该节点也返回 RUNNING。 否则,它总是返回 SUCCESS。 3)…...
Docker Swarm 集群使用指南概述
概述 对于简单轻量级集群管理,利用 Docker Swarm 就够用了,适合中小型应用程序的容器编排。如果是比较重的中心化集群管理方案或需要更复杂的功能,可以考虑使用 Kubernetes Helm Consul 等更强大的容器编排工具。 Docker Swarm 1. Docke…...
【行业树选择器组件:基于Vue3与Element Plus的高性能树形选择组件优化与重构】
行业树选择器组件:基于Vue3与Element Plus的高性能树形选择组件优化与重构 组件概述与背景 行业树选择器是一个基于Element Plus的ElTreeSelect封装的业务组件,主要应用于能源管理系统中,用于展示和选择国标行业分类体系的四级层级结构。该…...
PasteForm框架开发之Entity多级嵌套的表单的实现
你相信么,使用PasteForm框架开发,管理端居然不要写代码!!! 一起来看看PasteForm是否支持多级表模式(外表) 需求假设 假如有这么一个需求,就是订单表,包含了多级的信息,比如这个订单包含了哪些…...
Anaconda笔记
下载Anaconda 清华源 官方源 本文下载:Anaconda3-2024.10-1-Windows-x86_64.exe 建议不要安装到C盘,我的安装到D:Anaconda目录 设置环境变量 WinR cmd命令行输入: conda --version:可以查看到版本信息安装成功c…...
Linux——共享内存
目录 一、共享内存概念 二、共享内存的一些函数 2.1 shmget 创建共享内存 2.2 shmat 访问共享内存 2.3 shmdt 解除共享内存的映射 2.4 shnctl 删除共享内存段 三、共享内存 3.1 创建测试进程 3.2 使用循环测试 编辑 3.3 共享内存写入程序 3.4 带有信号量的共享内…...
计算机系统---烤机(性能测评)
计算机烤机 一、烤机的定义与核心目的 烤机(Burn-in Test) 是通过对计算机硬件施加持续高负载,模拟极端运行环境,以验证硬件稳定性、性能极限、散热能力及潜在缺陷的测试方法。核心目标包括: 硬件稳定性验证&#x…...
Linux命令+Git命令
Linux命令Git命令 linux查看两个操作系统cd命令的区别操作文件和文件夹vim不同模式保存和退出 Git linux Linux操作系统中,几乎所有的东西都以文件夹或文件形式存在,这些文件夹/文件有一个共同的根目录/。如果我们在某块磁盘A上(无其他分区&…...
【前端】Nuxt打包部署的几种方式
一、总结知识点 Nuxt 是基于 Vue 的服务端渲染框架,部署方式主要取决于你使用的 Nuxt 模式:Universal (SSR)、SPA 或 Static Site Generation (SSG)。不同模式下的打包部署流程略有不同。以下将分别介绍 Nuxt 应用的打包和部署方式。 二、详细说明 1. …...
DP 16bit位宽数据扰码实现和仿真
DisplayPort 1.4协议中数据需进行扰码,扰码用到了16-bit LFSR,表达式如下。 LFSR每移位8个bit后,用最高有效 8 位以相反的位顺序与一个字节数据进行异或从而实现数据加扰/解扰。 我们已利用这个框图进行8个时钟周期迭代,得到了和…...
力扣每日打卡 1534. 统计好三元组 (简单)
力扣 1534. 统计好三元组 简单 前言一、题目内容二、解题方法1. 暴力解法2.官方题解2.1 方法一:枚举2.2 方法二:枚举优化 前言 这是刷算法题的第十二天,用到的语言是JS 题目:力扣 1534. 统计好三元组 (简单) 一、题目内容 给你一…...
CExercise_13_1排序算法_1插入排序
题目: 请自己手动实现插入排序算法: // 插入排序 void insertion_sort(int arr[], int len); 然后给定一个int数组,实现将它从小到大进行排序。 关键点 分析: 在插入排序中,稳定性指的是排序算法能够保持相等元素的原始…...
图论--DFS搜索图/树
目录 一、图的存储结构 二、题目练习 846. 树的重心 - AcWing题 dfs,之前学习的回溯算法好多都是用dfs实现搜索的(把题目抽象成树形结构来搜索),其实 回溯算法就是 深搜,只不过针对某一搜索场景 我们给他一个更细分…...
blender 超逼真角色daz 纹理材质 humanpro插件
https://www.youtube.com/KhanhVo-zp9lh/featured https://superhivemarket.com/products/humanpro https://superhivemarket.com/products/humanpro HUMANPRO 插件 - BLENDER HumanPro 是一款专为帮助用户轻松快速地创建高度精细逼真的人体皮肤纹理和复杂皱纹而设计的插件…...
关于响应式编程框架ReactiveUI的感悟
1.我第一个接触的MVVM框架是Caliburn Micro,后来接触到了ReactiveUI这种响应式编程思想的框架,主要说一下本人目前学习感想(针对尽快上手使用MVVM开发WPF); 首当其冲的工具是DeepSeek,总结好问题直接提问&…...
Swift —— delegate 设计模式
一、什么是 delegate 模式 所谓 delegate 就是代理模式。简单来说,delegate 模式就是在类的函数里运行完一段代码后,你可以通过一个符合某个代理协议的属性来调代理的方法。其中,代理方法就是回调函数。 二、delegate 模式与闭包比的优势 …...
远方游子的归家记:模仿美食网页的制作与实现
前言 2023年的夏天,闲得无聊学了一个礼拜前端知识点。并根据所学知识点模仿制作了一篇网络上公开发布的关于家乡美食的文章。今天才想到有这个不错的案例可以分享出来,以供大家学习参考。 知识点简介 运用的知识点比较简单,常规的div盒子&…...
React JSX?
JSX JSX 是 JavaScript XML 的缩写,它是一种 JavaScript 的语法扩展,允许你在 JavaScript 中写 HTML 类似的代码,常用于 React 中定义 UI 组件的结构。 JSX 示例代码: import React from react;function App() {return (<di…...
【Pandas】pandas DataFrame iterrows
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
docker多架构镜像构建
docker多架构镜像构建 Docker 多架构镜像构建(Multi-Architecture Image Build)允许你为不同平台(如 linux/amd64, linux/arm64, linux/arm/v7 等)构建和推送统一的镜像标签,解决在不同硬件架构之间部署的问题。 Doc…...
日志查询 Less命令:/搜索
跟more命令一样,唯一不同的是less命令可以向上翻页,但是more命令不行 注意:按空格或F -- 进行翻页; 按回车 -- 一行一行往下翻; 按q或Q – 表示退出 Page up:一页一页向上翻; 向上键:一行一行…...
[MySQL] 事务管理(一) 事务的基本概念
1.为什么需要事务 1.1 CURD不加控制会有什么问题 我认为要解决上面的问题,CURD必须要有以下的属性 买票的过程必须是原子的 买票相互之间不可以收到影响 买完票需要永久有效 买前,买后的状态必须是确定的 2. 什么是事务? 事务就是一组DML语…...
rk3588 驱动开发(一)字符设备开发
3.字符设备驱动开发 3.1 什么是字符设备驱动 字符设备:就是一个个字节,按照字节流进行读写操作的设备,读写是按照先后顺序的。 举例子:IIC 按键 LED SPI LCD 等 Linux 应用程序调用驱动程序流程: Linux中驱动加载成功…...
【第45节】windows程序的其他反调试手段上篇
目录 引言 一、通过窗口类名和窗口名判断 二、检测调试器进程 三、父进程是否是Explorer 四、RDTSC/GetTickCount时间敏感程序段 五、StartupInfo结构的使用 六、使用BeingDebugged字段 七、 PEB.NtGlobalFlag,Heap.HeapFlags,Heap.ForceFlags 八、DebugPort:CheckRem…...
通过人类和机器人演示进行联合逆向和正向动力学的机器人训练
25年3月来自哥伦比亚大学的论文“Train Robots in a JIF: Joint Inverse and Forward Dynamics with Human and Robot Demonstrations”。 在大型机器人演示数据集上进行预训练是学习各种操作技能的强大技术,但通常受到收集以机器人为中心数据的高成本和复杂性限制…...
云渗透三(对象存储攻防)
对象存储是什么? 对象存储(Cloud Object Storage,COS)是腾讯云提供的⼀种存储海量⽂件的分布式存储服务,⽤户可通过⽹络随时存储和查看数据。腾讯云 COS 使所有⽤户都能使⽤具备⾼扩展性、低成本、可靠和安全的数据存储服务。 COS 通过控制台、API、SDK 和⼯具等多样化⽅…...
ShenNiusModularity项目源码学习(17:ShenNius.Admin.Mvc项目分析-2)
ShenNiusModularity项目的后台管理主页面如下图所示,该页面为ShenNius.Admin.Mvc项目的Views\Home\Index.cshtml,使用的是layuimini后台模板(参考文献2),在layuimini的GitHub主页中提供有不同样式的页面模版链接&#…...
Sentinel源码—2.Context和处理链的初始化一
大纲 1.Sentinel底层的核心概念 2.Sentinel中Context的设计思想与源码实现 3.Java SPI机制的引入 4.Java SPI机制在Sentinel处理链中的应用 5.Sentinel默认处理链ProcessorSlot的构建 1.Sentinel底层的核心概念 (1)资源和规则 (2)Context (3)ProcessorSlot (4)Node (1…...
嵌入式C语言高级编程:OOP封装、TDD测试与防御性编程实践
一、面向对象编程(OOP) 尽管 C 语言并非面向对象编程语言,但借助一些编程技巧,也能实现面向对象编程(OOP)的核心特性,如封装、继承和多态。 1.1 封装 封装是把数据和操作数据的函数捆绑在一起,对外部隐藏…...
C++中unique_lock和lock_guard区别
目录 1.自动锁定与解锁机制 2.灵活性 3.所有权转移 4.可与条件变量配合使用 5.性能开销 在 C 中,std::unique_lock 和 std::lock_guard 都属于标准库 <mutex> 中的互斥锁管理工具,用于简化互斥锁的使用并确保线程安全。但它们存在一些显著区别…...
C# 使用.NET内置的 IObservable<T> 和 IObserver<T>-观察者模式
核心概念 IObservable<T> 表示 可观察的数据源(如事件流、实时数据)。 关键方法:Subscribe(IObserver<T> observer),用于注册观察者。 IObserver<T> 表示 数据的接收者,响应数据变化。 三个核心…...
多模态大模型文字识别 vs OCR识别模型
论文简述 多模态大语言模型(Multimodal Large Language Models,简称多模态LLMs)具有高度通用性,能够处理图像描述、文档分析和自动化内容生成等多种任务。这种广泛的适用性使其在不同工业领域都受到了大量关注。 在OCR方面,多模态LLMs的表现超过了专门为OCR设计的模型。这…...
[区块链] 持久化运行区块链 | 并通过HTTP访问
实验目标 以Web服务的形式持久化运行区块链,并通过HTTP接口的形式实现对区块链的操作。 实验内容 构建区块链的区块对象和区块链对象。使用Flask等Web服务框架运行持久化的进程,实现基于HTTP接口实现新区块的添加功能以及传递区块索引查询区块链中的区…...
批量将不同位置的多个文件复制到一个文件夹
在日常工作中,我们常常需要将多个位置的文件集中到一个文件夹中。手动一个个复制文件既费时又容易出错。使用批量文件复制工具,您可以轻松将不同位置的多个文件快速复制到一个文件夹中,大大提高工作效率。 今天给大家介绍一下批量将不同位置的…...
CentOS 下 Zookeeper 常用命令与完整命令列表
一、服务管理命令 常用服务命令 启动 Zookeeper 服务: systemctl start zookeeper # 使用 systemd (推荐) /usr/local/zookeeper/bin/zkServer.sh start # 直接启动 停止服务: systemctl stop zookeeper /usr/local/zookeeper/bin/zkServer.sh stop 查看服务状态…...