2025-04-19 Python 强类型编程
文章目录
- 1 方法标注
- 1.1 参数与返回值
- 1.2 变参类型
- 1.3 函数类型
- 2 数据类型
- 2.1 内置类型
- 2.2 复杂数据结构
- 2.3 类别选择
- 2.4 泛型
- 3 标注方式
- 3.1 注释标注
- 3.2 文件标注
- 4 特殊情形
- 4.1 前置引用
- 4.2 函数标注扩展
- 4.3 协变与逆变
- 4.4 dataclass
- 5 高级内容
- 5.1 接口
- 5.2 泛型的协变/逆变
- 5.3 字面量类型
- 5.4 静态检查
- 5.5 Final 与 final
- 5.6 关闭静态类型检查
- 工具参考
- 参考链接
环境:
- Pycharm Professional 2025.1
- Python 3.12.9
Python 是一门强类型的动态类型语言,可以动态构造脚本执行、修改函数、对象类型结构、变量类型,但不允许类型不匹配的操作。
Python 也提供了类型标注功能,有了类型标注提示后,就可以在编码时即发现错误。

强类型检查的优势
- 几大优势:
- 易读:比 docstring 更易理解接口协议,也更易使用第三方库(IDE 工具支持)
- 排错:编码、编译期间即可发现错误(IDE 工具支持)
- 重构:接口范围明确,更易于理解和放心重构。
- 性能:(可能)可以做到静态编译优化。
- 现实:
- 生态-IDE:(方类型检查工具比较全面(PyCharm、VSCode、VIM 等)。
- 生态库工具:(方库有官方或大厂支持且很流行。
- 官方 /mypy-9.5 K star、Facebook/.pyre-5 K Star,Google/pytype-3 K star 等。
- 成熟度:静态检查已被广泛验证有效性,尤其大型工程(dropboxi 迁移 400 万行到静态标注)
- 行业:主流编程语言以静态强类型检查为主(C++、Jva、Go 等);其他动态语言的静态类型扩展迅猛发展(如 TypeScript)。
如下是一个非常长的(14个)PEP(Python 改进建议)的列表和落地情况(图中时间是文档时间 +1 年左右是实际落地时间),并且在 PEP 483 开始快速迭代(图中橙色是比较重要的迭代),并且到了 Python3.7 才真正算是成型。

什么时候建议采用强类型检查
-
提供 SDK、库/接口给其他人时。
比 docstring 更清晰、主流 IDE 支持提示和校验。
-
代码行数越多,价值越大。
规范化编码,通过工具可以辅助发现潜在 BUG。
-
需要写 UT(单元测试)的地方,就需要类型检查(by Bernat Gabor)。
以下情况适当考虑
- 原型(Prototype)或验证性质项目(POC)的代码,可以先不引入。
- 大量旧有代码,需要逐步阶段性引入(参考 Dropbox 经验)。
- 不熟悉 Python 和类型提供功能用法时,可以先不引入。
1 方法标注
1.1 参数与返回值
对函数参数,返回值进行标注。

def add(v1: int, v2: int) -> int:"""两个数字相加"""return v1 + v2
1.2 变参类型
对变参、命名变参直接标注其类型。

def foo(*args: str, **kwds: int):...foo('a', 'b', 'c')
foo('a', 'b', 1) # 错误
foo(x=1, y=2)
foo(x=1, y='x') # 错误
foo('', z=0)
1.3 函数类型
函数类型:Callable[[参数1类型, 参数2类型, ...], 返回类型]

2 数据类型
2.1 内置类型
对内置类型标注,在变量声明后面添加 :类型
即可。

a: int = 100
b: str = "abc"
2.2 复杂数据结构
Sequence
Sequence
表示server
可以是任何序列类型(包括list
,tuple
,collections.deque
等)。Sequence
更通用,允许调用方传入列表、元组或其他序列类型。list
表示server
必须是一个具体的列表(list
),不能是元组或其他序列类型。

from collections.abc import SequenceConnectionOptions = dict[str, str]
Address = tuple[str, int]
Server = tuple[Address, ConnectionOptions]def connect(message: str,server: Sequence[Server]) -> None:...# 等价于
def connect1(message: str,server: Sequence[tuple[tuple[str, int], dict[str, str]]]) -> None:...
2.3 类别选择
- 使用
Union
定义可能的类型选择:x、y、返回值的类型同一时刻可以不同。 - 使用
TypeVar
定义一组类型:x、y、返回值的类型同一时刻必须相同。

from typing import Union, TypeVar, TextAnyStr1 = Union[Text, bytes]
AnyStr2 = TypeVar('AnyStr2', Text, bytes)def concat1(x: AnyStr1, y: AnyStr1) -> AnyStr1:passdef concat2(x: AnyStr2, y: AnyStr2) -> AnyStr2:passconcat1('a', 'b') # 正确
concat1(b'a', b'b') # 正确
concat1('a', b'b') # 正确
concat2('a', 'b') # 正确
concat2(b'a', b'b') # 正确
concat2('a', b'b') # 错误
2.4 泛型
使用 TypeVar
表示泛型。
容器泛型示例 1

T = TypeVar('T') # 一个泛型类型# 接受一个元素类型都是T的序列,返回值的类型也是T
def first(l: Sequence[T]) -> T: # 泛型函数return l[0]first([1, 2]) + 100 # 正确
first(['a', 'c']).upper() # 正确
first(['a', 'c']) + 100 # 错误
容器泛型示例 2

from typing import TypeVar, IterableT = TypeVar('T', bound=float)
Vector = Iterable[tuple[T, T]]def inproduct(v: Vector[T]) -> T:return sum(x * y for x, y in v)
类与泛型

from typing import TypeVar, GenericT = TypeVar('T')class MyClass(Generic[T]):def meth_1(self, x: T) -> T:...def meth_2(self, x: T) -> T:...a: MyClass[int] = MyClass()
a.meth_1(1) # 0K
a.meth_2('a') # 错误
3 标注方式
3.1 注释标注
- 使用注释
# type: xxxx
进行标注 - 函数的标注方式:
(参数类型列表)->返回值类型

from typing import Listclass A(object):def __init__(self):# type: ()->Noneself.elements = [] # type: List[int]def add(self, element):# type: (List[int])->Noneself.elements.append(element)
3.2 文件标注
- 独立的 stub 文件(.pyi)与源文件并行即可(放在同一目录下)。
- 优点:
- 不需要修改源代码(减少引入 BUG 可能)
- Pyi 可以使用最新的语法(源文件可以是低版本)
- 测试友好。
- 不拥有的三方库,也可以补充标注信息。
- 缺点:
- 代码重复写了一遍头(工作量)
- 打包变得复杂

# pyi文件from typing import Listclass A(object):elements = ... # type: List[int]def __init__(self) -> None:...def add(self, element: int) -> None:...
4 特殊情形
4.1 前置引用
二叉树节在进行类型标注时需要引用自己,这种情况下需要使用前置引用,方式是用字符串代替类型标注。

from typing import Listclass Tree:def __init__(self, left: 'Tree', right: 'Tree'):self.left = leftself.right = rightdef leaves(self) -> List['Tree']:...
4.2 函数标注扩展
- 使用
overload
进行参数返回值描述。 - 必须有一个无修饰版本做真正实现。
- 仅用于静态类型检查,运行时重载可以使用 functools.singleddispatch 等。

from fontTools import unicode
from typing import overload@overload
def utf8(value: None) -> None:...@overload
def utf8(value: bytes) -> bytes:...@overload
def utf8(value: unicode) -> bytes:...def utf8(value):... # 实际的实现,必须有
有时也可以用 TypeVar
代替(更简洁)。

from typing import TypeVarAnyStr = TypeVar('AnyStr', None, unicode, bytes)
AnyStrRet = TypeVar('AnyStrRet', None, unicode, bytes)def utf8(value: AnyStr) -> AnyStrRet:... # 实际实现
4.3 协变与逆变
-
协变:
让一个粗粒度接口(或委托)可以接收一个更加具体的接口(或委托)作为参数(或返回值);
例如:老鹰列表赋值给鸟列表。 -
逆变:
让一个接口(或委托)的参数类型(或返回值)类型更加具体化,也就是参数类型更强,更明确。
例如:鸟列表赋值给老鹰列表。

from typing import TypeVar, GenericT_co = TypeVar('T_co', covariant=True) # 协变class MyList(Generic[T_co]):def __init__(self, items: List[T_co]) -> None:self.items = itemsclass Bird:...class Eagle(Bird):...egls: MyList[Eagle] = MyList([Eagle()])
brds: MyList[Bird] = egls
4.4 dataclass
- 带默认值的可变命名元组

from dataclasses import dataclass, field@dataclass
class InventoryItem:name: strunit_price: floatquantity_on_hand: int = 0 # 默认值
- 复杂域默认值

@dataclass
class C:mylist: List[int] = field(default_factory=list)c = C()
c.mylist += [1, 2, 3]
- 延迟初始化

@dataclass
class C:a: floatb: floatc: float = field(init=False) # 默认不初始化 cdef __post_init__(self): # 通过延迟初始化 cself.c = self.a + self.bprint(C(1, 2)) # print: "C(a=1, b=2, c=3)"
5 高级内容
5.1 接口
Python 支持 OOP,也支持 duck typing。在强类型检查中,duck typing 也一样适用。
例如一个函数 close_resource 接受一个参数,要求这个参数必须提供一个特定的方法 .close()
。这种需求在强类型检查时,也可以支持,称之为静态 duck typing,相关方案由 PEP 544 支持。
- 定义了类似于 Java 的接口
- 可以有实现,可以被继承。
- 可以继承多个接口,构建一个新接口。
- 实际类型检查时,不要求继承关系
- 只需要对象的所有成员方法 signature 匹配 Protocoll 即可(duck-typing)。

from typing import Protocol, Iterableclass IResource(Protocol):def close(self) -> None:...class Resource: # 也可以继承IResource(非必须)def close(self) -> None:...def close_all(things: Iterable[IResource]) -> None:for t in things:t.close()f = open('foo.txt')
r = Resource()
close_all([f, r]) # 通过
close_all([1]) # 不通过
5.2 泛型的协变/逆变
-
协议 (
Protocol
) 必须被实现Box
是抽象接口,不能直接实例化,必须有一个类实现content()
方法。
-
协变 (
covariant=True
) 的规则-
Box[int]
可以赋值给Box[float]
,因为int
是float
的子类型(协变允许子类替换父类)。 -
协变表示:如果
A
是B
的子类型,则Box[A]
是Box[B]
的子类型。 -
int
是float
的子类型(因为所有int
都可安全当作float
使用),所以Box[int]
可赋值给Box[float]
。
-

from typing import TypeVarT_co = TypeVar('T_co', covariant=True) # 支持协变或逆变class Box(Protocol[T_co]):def content(self) -> T_co:...# 具体实现
class IntBox:def content(self) -> int:return 42class FloatBox:def content(self) -> float:return 3.14# 正确赋值
second_box: Box[int] = IntBox() # ✅ 实现 Box[int]
box: Box[float] = second_box # ✅ 协变允许(int 是 float 的子类型)
5.3 字面量类型
不修改类型为 enum
的情况下,限定传递参数:Literal[字面量1,字面量2,]
。

from typing import Literal, Any# 总是返回True
def validate_simple(data: Any) -> Literal[True]:...# 只能是这几个值
MODE = Literal['r', 'rb', 'w', 'wb']def open_helper(file: str, mode: MODE) -> str:...open_helper('/some/path', 'r') # 通过
open_helper('/other/path', 'typo') # 不通过
5.4 静态检查
- 可以在静态检查时导入特定的库,运行时不做。
- 这种情况下,相关标注只能用注释或字符串(前置)方式标注。

import typingif typing.TYPE_CHECKING:import expensive_moddef a_func(arg: 'expensive_mod.Someclass') -> None:a_var = arg # type: expensive_mod.Someclass
5.5 Final 与 final
Final
在 Python 3.8 版本中引入一个扩展的标注 typeing.Final
,用于标注变量,这个内置标注非常有用,可以理解为实现了 C++ 语法 const 的静态检查作用。
- 指定变量被初始化后无法再被修改、类变量无法被子类修改。
- 声明为 Final 的类成员的变量,未初始化的,必须在
__init__
里面初始化。

from typing import FinalMAX_SIZE: Final = 9000
MAX_SIZE += 1 # 错误class ImmutablePoint:x: Final[int]y: Final[int] # 错误def __init__(self) -> None:self.x = 1 # 未初始化ydef s(self):self.x = 1 # x不能被重新赋值
final
另一个被引入的就是小写的 typing.final
,用于标注类,可以理解为实现了 Java 语法 final 的静态检查作用。虽然 Python 本身就可以扩展实现运行时 final 的作用,但是这里实现了检查期的final,这个官方版本可以说非常的有用。
如下,除了可以修饰类(不能被继承),甚至可以修饰类的方法(不能被重写)

from typing import final@final
class Base:...class Derived(Base): # 错误...class Base2:@finaldef foo(self):...class Derived2(Base2):def foo(self): # 错误...
5.6 关闭静态类型检查
特定情况下,我们也需要关闭静态检查(例如测试或开发中间时),这种情况只需要使用 typing.no_type_check
修饰函数或类来关闭。
如果希望关闭对一个装饰器的静态检查的话,需要使用 typing.no_type_check_decorator
修饰装饰器来关闭。

from typing import no_type_check, no_type_check_decorator@no_type_check
def add(v1: int, v2: int) -> int:...@no_type_check_decorator
def log_enter_exit(fn):def __wrapped(*args: int, **kwargs: int):...return __wrapped
工具参考
- typeshed:Python 内置标准和三方库的 pyi 集合 repo(PyCharm、mypy、pytype 已包含)
- mypy:官方标准静态类型检查工具。
- pyre:Facebook 开源的静态类型检查工具。
- pytype:google 开源的 Python 静态代码扫描工具(不依赖标注)。
- pyannotate:dropbox 开源的自动给 Python 添加类型标注的工具。
- pydantic:一个基于标注的 Python 数据校验与配置管理库。
参考链接
- 丁来强-Python强类型编程最佳实践_哔哩哔哩_bilibili。
- Python的强类型特性与类型检查实践-CSDN博客。
相关文章:
2025-04-19 Python 强类型编程
文章目录 1 方法标注1.1 参数与返回值1.2 变参类型1.3 函数类型 2 数据类型2.1 内置类型2.2 复杂数据结构2.3 类别选择2.4 泛型 3 标注方式3.1 注释标注3.2 文件标注 4 特殊情形4.1 前置引用4.2 函数标注扩展4.3 协变与逆变4.4 dataclass 5 高级内容5.1 接口5.2 泛型的协变/逆变…...
RVOS的任务调度优化
12.系统优化–任务调度 12.1 改进任务管理功能 在原有基础上进⼀步改进任务管理功能。具体要求:改进 task_create(),提供更多的参数,具体改进后的函数如下所⽰: int task_create(void (*task)(void* param),void *param, uint8…...
【论文阅读20】-CNN-Attention-BiGRU-滑坡预测(2025-03)
这篇论文主要探讨了基于深度学习的滑坡位移预测模型,结合了MT-InSAR(多时相合成孔径雷达干涉测量)观测数据,提出了一种具有可解释性的滑坡位移预测方法。 [1] Zhou C, Ye M, Xia Z, et al. An interpretable attention-based deep…...
图像预处理-图像噪点消除
一.基本介绍 噪声:指图像中的一些干扰因素,也可以理解为有那么一些点的像素值与周围的像素值格格不入。常见的噪声类型包括高斯噪声和椒盐噪声。 滤波器:也可以叫做卷积核 - 低通滤波器是模糊,高通滤波器是锐化 - 低通滤波器就…...
PP-OCR的安卓端部署
EMO了几天 我浪费了几天的生命,去研究PP-OCR的模型微调、从训练模型导出预测模型,结果一个坑接着一个坑,没有善终。 找了好多资料,得到一些负面信息,比如说飞浆的团队修复问题不及时啦,代码仓库有好多年不…...
2048小游戏C++板来啦!
个人主页:PingdiGuo_guo 收录专栏:C干货专栏 大家好呀,我是PingdiGuo_guo,今天我们来学习如何用C编写一个2048小游戏。 文章目录 1.2048的规则 2.步骤实现 2.1: 初始化游戏界面 2.1.1知识点 2.1.2: 创建游戏界面 2.2: 随机…...
研0大模型学习(第四、五天)
学习CSDN教程:VSCode Debug指南 但里面貌似主要是针对nodejs的,所以我在 CSDN教程:VSCode调试python程序 中学习,刚开始调试报错python版本太低,于是我安装了旧版本的pythondebugger,再把python解释器从原…...
编程规范之整数运算
在表达式中混用有符号数和无符号数时,可能会因隐式转换而导致非预期的结果。因此应尽量在表达式中使用相同符号类型的 变量。 对于无法使用相同符号类型的场景,应将不同类型的变量显式转换为相同类型,当表达式中的无符号数隐式转换为另一个有…...
【零基础】基于 MATLAB + Gurobi + YALMIP 的优化建模与求解全流程指南
MATLAB Gurobi YALMIP 综合优化教程(进阶) 本教程系统介绍如何在 MATLAB 环境中使用 YALMIP 建模,并通过 Gurobi 求解器高效求解线性、整数及非线性优化问题。适用于工程、运营研究、能源系统等领域的高级优化建模需求。 一、工具概览 1.…...
C++17 信号量模拟实现
C17 信号量模拟实现 一、实现原理 C17 标准库没有原生信号量(C20才有),但可以通过 std::mutex std::condition_variable 模拟实现。以下是核心逻辑: #include <mutex> #include <condition_variable>class CountingSemaphore { private:…...
LINUX学习——守护进程的含义及编程实现
实验目的 理解守护进程的含义。掌握编程实现守护进程的主要步骤。 实验步骤 守护进程的含义: 守护进程是运行在后台的一种特殊进程,独立于控制终端,周期性地执行任务或等待处理事件。守护进程通常以 d 结尾,如 httpd、sshd 等。…...
Json 在线格式化 - 加菲工具
Json 在线格式化 打开网站 加菲工具 选择“Json 在线格式化” 或者直接进入 https://www.orcc.top/tools/json 输入Json,点击左上角的“格式化”按钮 得到格式化后的结果...
final关键字带来的问题
定义了一个配置类: public class EsignConfig { public static final String EsignOrgId "*****"; // 应用ID public static final String EsignAppId "*****"; // 应用密钥 public static final String EsignAppSecret…...
Flash存储器(一):接口标准全解析
目录 一.接口类型与协议标准 二.应用场景 Flash存储器的接口设计直接影响其性能、应用场景及系统集成复杂度。以下从接口类型、协议标准及应用场景三个方面进行系统阐述。 一.接口类型与协议标准 Flash接口类型与协议标准 序号接口类型协议标准特点1并行接口…...
第18周:对于ResNeXt-50算法的思考
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 问题:在上一章代码中是ResNeXt-50的残差单元,问题:如果conv shortcutFalse那么在执行“xAdd0)…“语句时,通道数不一致的&…...
Django 结合 Vue 实现简单管理系统的详解
以下是一个 Django 结合 Vue 实现简单管理系统的详细步骤及示例代码: 项目整体架构思路 后端:使用 Django 搭建 RESTful API,负责数据的存储和处理。前端:使用 Vue 构建用户界面,通过调用后端 API 实现数据的展示、添加、修改和删除等操作。步骤 1:创建 Django 项目和应…...
ValueError: model.embed_tokens.weight doesn‘t have any device set
ValueError: model.embed_tokens.weight doesn’t have any device set model.embed_tokens.weight 通常在深度学习框架(如 PyTorch)中使用,一般是在处理自然语言处理(NLP)任务时,用于指代模型中词嵌入层(Embedding layer)的权重参数。下面详细解释: 词嵌入层的作用 …...
公务员行测之速算分数记忆检验-无答案版本
前言 这一篇是根据百分数,默写分数,我发现我看见百分数有点想不到分数 速算之百分数记忆检验 50 % \ 50\% 50% 33.3 % \ 33.3\% 33.3% 25 % \ 25\% 25% 20 % \ 20\% 20% 16.7 % \ 16.7\% 16.7% 14.3 % \ 14.3\% 14.3% 12.5 % \ 12.5\% 1…...
大模型面经 | DeepSpeed中ZeRO-1、ZeRO-2和ZeRO-3的区别是什么?
大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...
【Java面试系列】Spring Boot微服务架构下的分布式事务设计与实现详解 - 3-5年Java开发必备知识
【Java面试系列】Spring Boot微服务架构下的分布式事务设计与实现详解 - 3-5年Java开发必备知识 引言 在微服务架构中,分布式事务是一个不可避免的话题。随着业务复杂度的提升,单体应用逐渐演变为多个微服务,如何保证跨服务的数据一致性成为…...
大语言模型减少幻觉的常见方案
什么是大语言模型的幻觉 大语言模型的幻觉(Hallucination)是指模型在生成文本时,输出与输入无关、不符合事实、逻辑错误或完全虚构的内容。这种现象主要源于模型基于概率生成文本的本质,其目标是生成语法合理、上下文连贯的文本&…...
方案解读:虚拟电厂标杆项目整体建设方案【附全文阅读】
在电力市场背景下,传统电力现货市场存在电能定价不合理、分布式电源并网困难等问题。本虚拟电厂标杆项目旨在研究全时间尺度虚拟电厂智能管控关键技术,通过研制虚拟电厂控制器样机、开发运行管理平台,实现对分布式能源的合理优化配置。项目内容涵盖虚拟调控、建设目标、建设…...
shiro使用
shiro是apache提供的一种安全框架。他可以将登录,权限这一方面简单化。 使用shiro需要引入 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.9.0</version></depend…...
Spring Boot日志系统详解:Logback与SLF4J的默认集成
大家好呀!👋 今天我们来聊聊Spring Boot中一个超级重要但又经常被忽视的功能——日志系统! 一、日志系统的重要性 首先,咱们得明白为什么日志这么重要?🤷♂️ 想象一下,你正在玩一个超级复…...
基于SpringBoot成绩管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
AI象棋 3.0 |AI自动下象棋工具,破译残局,自动帮助下棋,内置视频教程
Ai象棋是一款自动识别棋盘并分析下棋局势的工具,它能够自动化操作,帮助用户学习象棋知识。该软件无限制使用、界面无广告简洁,并提供永久授权。数据库中挑选1到2个即可完全满足使用需求,不必全部下载,解压mt管理器即可…...
刘鑫炜履新共工新闻社新媒体研究院院长,赋能媒体融合新征程
2025年4月18日,大湾区经济网战略媒体共工新闻社正式对外宣布一项重要人事任命:聘任蚂蚁全媒体总编刘鑫炜为新媒体研究院第一任院长。这一举措,无疑是对刘鑫炜在新媒体领域卓越专业能力与突出行业贡献的又一次高度认可,也预示着共工…...
学习型组织与系统思考
真正的学习型组织不是只关注个人的学习,而是关注整个系统的学习。—彼得圣吉 在这两年里,越来越多的企业开始询问是否可以将系统思考的内容内化给自己的内训师,进而在公司内部进行教学。我非常理解企业这样做的动机,毕竟内部讲师…...
mysql中优先使用datetime存储时间
基于大模型的问答进行了记录。 对为甚timestamp不如datetime好用做了深入了解,再此记录 范围广 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ 而 timestamp 仅支持’1970-01-01 00:00:01’ 到 ‘2038-01-19 03:14:07’ UTC, 存在2038年问题, 不适合长期存…...
【Linux】深入理解Linux文件系统:从C接口到内核设计哲学
文章目录 前言一、C语言中的文件接口1. 文件指针(句柄)FILE*以写方式打开文件,若文件不存在会新建一个文件W写入方式,在打开文件之前都会将文件内容全部清空追加写方式,其用法与写方法一致,不同在于a方法可…...
前端零基础入门到上班:Day7——表单系统实战全解析
🧩前端零基础入门到上班:Day7——表单系统实战全解析 ✅ 目标:不仅掌握 HTML 表单标签,更深入理解其在实战中的作用、验证方式、美化技巧与 JS 联动,为后续接入 Vue、后端接口打下坚实基础。 🌟 一、HTML 表…...
阀门轴承电动车工件一键精修软件
若需定制开发“ComfyUI意见精修软件” 技术栈建议: 前端:React/Vue Figma插件API(直接读取设计稿)。 后端:Node.js/Python NLP库(spaCy/NLTK)。 数据库:MongoDB(存储…...
【疑难杂症】【VS Code】VS Code连接不上远程服务器
【疑难杂症】【VS Code】VS Code连接不上远程服务器 经过多轮资料查询和测试,这种时候有三种可能: 可能原因1:服务器磁盘空间不足,无法创建服务器连接。 解决方案:清理磁盘空间,尤其是/tmp文件所在的磁盘。…...
Word 中“母版页”的等效机制
Word 和 PowerPoint 不太一样——**Word 实际上没有像 PowerPoint 那样的“母版页(Master Page)”**功能。但它有1个和“母版页”功能类似的东西,可能造成你看到的“校徽自动出现在每一页”的现象: ✅ Word 中“母版页”的等效机制…...
大模型时代:AI应用的变革与挑战
最近研学过程中发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...
C++ (菱形继承,通用接口 ,多态介绍)
菱形继承 class A{public :int a;};class B:public A{};class C:public A{};class D:public B,public C{public:void function(){a200;} };int main(){D object;// object.a100; 如果如此使用会产生报错 会导致一个成员在类D中出现两次,产生歧义,浪…...
vue3+vite 实现.env全局配置
首先创建.env文件 VUE_APP_BASE_APIhttp://127.0.0.1/dev-api 然后引入依赖: pnpm install dotenv --save-dev 引入完成后,在vite.config.js配置文件内加入以下内容: const env dotenv.config({ path: ./.env }).parsed define: { // 将…...
4.18日学习--引用
引用是变量的别名,它为已存在的变量提供了一个新的名称,对引用的操作实际上就是对其所引用变量的操作。引用在定义时必须初始化,且一旦初始化后就不能再引用其他变量。 #include <iostream> using namespace std;//引用做函数的返回值…...
poj1067 取石子游戏 威佐夫博弈
题目 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法, 一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者…...
文件二进制读写和文本读写以及编码解码
假如是utf8编码,windows系统 写:往键盘中写的字符会被utf8编码成字节写入文件。假如是文本写,\n会被替换为\r\n写入,结尾会加文件结束符EOF。假如是二进制写,\n就是\n,文件结尾也不会加什么EOF 读ÿ…...
Java学习手册:常见并发问题及解决方案
在Java并发编程中,开发者常常会遇到各种并发问题,这些问题可能导致程序行为不可预测、性能下降甚至程序崩溃。以下是一些常见的并发问题及其解决方案: 1.竞态条件(Race Condition) 竞态条件是指多个线程同时访问共享…...
幽灵依赖与常见依赖管理
文章目录 前言1. 演示:检测和修复幽灵依赖步骤1:安装 depcheck步骤2:在项目根目录运行 depcheck可能的输出步骤3:修复幽灵依赖 2. 依赖管理的好习惯 1. 场景设定现在有如下依赖需求: 2. 依赖冲突的表现3. 解决依赖冲突…...
第T7周:咖啡豆识别
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 VGG 网络优缺点分析: ● 优点: 结构简洁统一:整张网络结构统一,只使用 33 的小卷积核和 22 的最大池化&…...
【MySQL数据库入门到精通】
文章目录 一、SQL分类二、DDL-数据库操作1.查询2.创建数据库3.删除数据库4.使用数据库 三、DDL-表操作1.查询 一、SQL分类 根据功能主要分为DDL DML DQL DCL DDL:Date Definition Language数据定义语言:定义数据库,表和字段 DML:Date Manipulatin Lan…...
C++智能指针的知识!
个人主页:PingdiGuo_guo 收录专栏:C干货专栏 大家好呀,我是PingdiGuo_guo,今天我们来学习一下智能指针。 文章目录 1.智能指针的概念 2.智能指针的思想 3.智能指针的作用 3.1 自动内存管理 3.2 共享所有权 3.3 避免悬挂指针…...
4.6 实现重定向
本实战通过ServletDemo09类演示了Servlet中的重定向功能。该Servlet通过HttpServletResponse的sendRedirect方法实现页面跳转。在doPost方法中,根据请求参数username和password判断用户身份。若用户名为admin且密码为123456,则调用sendRedirect方法将页面…...
Linux中的管道
管道的概念 管道是一种进程间通信的方式。 管道是一种半双工通信机制,数据只能读或写,如果要读写同时进行就要创建两个管道 管道的类型 1、匿名管道PIPE:通常在亲缘进程中使用(兄弟、父子) 函数参考:匿名管…...
深入简出:KL散度、交叉熵、熵、信息量简介、交叉熵损失
学习这些的最终目的 1、量化两个概率分布的差异 2、推导交叉熵损失 一、KL散度 KL散度就是用来量化两个概论分布的差异,如何量化? 计算真实概论分布P信息量 和 估计概论分布为Q,但实际概率分布为P时信息量的差值 那么设,概率分…...
`peft`(Parameter-Efficient Fine-Tuning:高效微调)是什么
peft(Parameter-Efficient Fine-Tuning:高效微调)是什么 peft库是Hugging Face推出的用于高效参数微调的库,它能在不调整模型全部参数的情况下,以较少的可训练参数对预训练模型进行微调,从而显著降低计算资源需求和微调成本。以下从核心功能、优势、常见微调方法、使用场…...
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(五)
一、每个阶段的 UAV—架构革新与限制突破 在 Microsoft Direct3D 11 中,计算着色器 (UAV) 的无序访问视图数限制为 8 个, (像素着色器) RTV) UAV (8 个组合 (呈现目标视图。 在 DirectX 11.1 中,可绑定的数量已增加。 对于 DirectCompute&a…...