你真的懂dataclass吗?默认值背后的机制只有资深工程师才知道

第一章:你真的懂dataclass吗?默认值背后的机制只有资深工程师才知道

在 Python 的日常开发中,dataclass 已成为定义数据容器类的事实标准。它通过装饰器自动生成 __init__、__repr__ 等特殊方法,极大简化了类的定义。然而,当涉及可变默认值(如列表、字典)时,隐藏的风险往往被开发者忽视。

可变默认值的陷阱

Python 中函数或类的默认参数在定义时即被求值一次。对于可变对象,这会导致所有实例共享同一份默认值引用,从而引发意外的数据污染。

from dataclasses import dataclass

@dataclass
class BadExample:
    items: list = []  # 危险!所有实例共享同一个列表

a = BadExample()
b = BadExample()
a.items.append("x")
print(b.items)  # 输出: ['x'] —— 意外修改了 b 的属性

正确使用默认工厂函数

为避免上述问题,应使用 field(default_factory=...) 来为可变类型提供独立的默认值。

from dataclasses import dataclass, field

@dataclass
class GoodExample:
    items: list = field(default_factory=list)  # 每次创建新实例时调用 list()

a = GoodExample()
b = GoodExample()
a.items.append("x")
print(b.items)  # 输出: [] —— 相互隔离,行为符合预期

default_factory 的常见用法

  • list:用于初始化空列表
  • dict:用于初始化空字典
  • set:用于去重集合
  • 自定义函数:实现复杂初始化逻辑
场景错误写法正确写法
默认列表items: list = []items: list = field(default_factory=list)
默认字典config: dict = {}config: dict = field(default_factory=dict)

第二章:深入理解dataclass默认值的基本行为

2.1 默认值的静态绑定与类属性共享

在 Python 中,函数参数的默认值在定义时被静态绑定,而非运行时动态生成。这会导致可变对象作为默认值时,在多个实例间共享同一引用,从而引发意外的数据同步问题。
典型问题示例

def add_item(item, target_list=[]):
    target_list.append(item)
    return target_list

print(add_item(1))  # [1]
print(add_item(2))  # [1, 2]
上述代码中,target_list 的默认列表在函数定义时创建,所有调用共享同一对象,导致结果累积。
安全实践建议
  • 避免使用可变对象(如列表、字典)作为默认参数
  • 使用 None 作为占位符,并在函数体内初始化
修正写法:

def add_item(item, target_list=None):
    if target_list is None:
        target_list = []
    target_list.append(item)
    return target_list

2.2 可变默认参数的陷阱与实际案例分析

在 Python 中,函数的默认参数在定义时被求值一次,若使用可变对象(如列表、字典)作为默认值,可能导致意外的共享状态。
常见错误示例
def add_item(item, target_list=[]):
    target_list.append(item)
    return target_list

print(add_item("a"))  # 输出: ['a']
print(add_item("b"))  # 输出: ['a', 'b'],而非预期的 ['b']
上述代码中,target_list 在函数定义时创建,后续所有调用共享同一列表,导致数据累积。
正确做法
应使用 None 作为默认值,并在函数内部初始化:
def add_item(item, target_list=None):
    if target_list is None:
        target_list = []
    target_list.append(item)
    return target_list
此方式确保每次调用都使用独立的新列表,避免副作用。
  • 可变默认参数仅初始化一次
  • 推荐使用不可变默认值(如 None)替代可变对象
  • 该陷阱常见于 Web 请求处理、缓存函数等场景

2.3 不同字段类型对默认值的影响对比

在数据库设计中,字段类型直接影响默认值的行为与存储逻辑。例如,数值类型通常允许显式设置默认值,而时间戳字段可能隐式使用 CURRENT_TIMESTAMP。
常见字段类型的默认值行为
  • INT:可设为 0 或 NULL,若未指定且允许 NULL,则默认为 NULL
  • VARCHAR:默认为空字符串或 NULL,取决于是否声明 NOT NULL
  • TIMESTAMP:自动填充当前时间,除非显式禁用
代码示例:建表语句中的默认值定义
CREATE TABLE user_info (
  id INT DEFAULT 0,
  name VARCHAR(50) DEFAULT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
上述代码中,id 显式设为 0,name 可为空,created_at 自动记录插入时间,体现了不同类型对默认值的差异化支持。
默认值影响对比表
字段类型默认值行为是否可为空
INT需显式指定依定义而定
VARCHAR空串或 NULL是
TIMESTAMP自动填充当前时间否(若未禁用)

2.4 使用default_factory避免状态污染的原理剖析

在并发编程中,共享状态容易引发数据竞争与状态污染。Python 的 `defaultdict` 提供了 `default_factory` 机制,确保每次访问不存在的键时动态生成独立的新对象,而非共用同一实例。
典型问题场景
  • 多个线程共用同一个列表引用
  • 默认值被意外修改导致后续调用受影响
  • 全局状态产生不可预知副作用
代码示例与分析
from collections import defaultdict

# 错误方式:使用可变对象作为默认值
bad_dict = defaultdict(list)
bad_dict['a'].append(1)
# 若不加控制,所有未初始化键共享同一list实例

# 正确方式:通过default_factory隔离状态
good_dict = defaultdict(lambda: [])
good_dict['b'].append(2)
上述代码中,`lambda: []` 每次调用都会创建全新的列表对象,从而彻底隔离不同键之间的状态,从根本上杜绝了跨键污染的可能性。

2.5 实践:构建安全的可变默认值字段

在定义函数或类时,使用可变对象(如列表、字典)作为默认值可能引发意外的共享状态问题。例如,将空列表作为默认参数,会导致所有调用共享同一实例。
问题示例

def add_item(item, target_list=[]):
    target_list.append(item)
    return target_list
上述代码中,target_list 在函数定义时被初始化一次,后续所有调用共享该列表,导致数据累积。
安全实践方案
推荐使用 None 作为默认值,并在函数体内初始化新对象:

def add_item(item, target_list=None):
    if target_list is None:
        target_list = []
    target_list.append(item)
    return target_list
此方式确保每次调用都使用独立的列表实例,避免了副作用。
  • 不可变默认值:使用 None、0、"" 等不可变类型
  • 运行时初始化:在函数逻辑内部创建可变对象

第三章:default_factory背后的运行机制

3.1 探究default_factory的设计哲学与调用时机

default_factory 是 Python collections.defaultdict 的核心参数,其设计哲学在于延迟初始化——仅在访问不存在的键时才触发默认值构造,避免内存浪费。

调用时机解析

该函数仅在通过 __getitem__ 访问缺失键时被调用,而 get() 或 in 判断不会触发:

from collections import defaultdict

d = defaultdict(list)
print(d['missing'])  # 触发 default_factory,返回 []
print(d.get('missing'))  # 不触发,返回 None

上述代码中,d['missing'] 触发 list() 构造新列表并插入字典;get 方法则遵循普通字典行为,不修改原字典。

常见工厂类型对比
工厂函数生成实例典型用途
list[]分组操作
int0计数器初始化
lambda: 'default'自定义值缺省填充

3.2 函数对象作为工厂:延迟初始化的实现方式

在复杂系统中,对象的创建可能涉及昂贵的资源开销。通过将函数作为工厂使用,可实现延迟初始化(Lazy Initialization),仅在真正需要时才构造实例。
工厂函数的基本结构
func NewService(config Config) func() *Service {
    var instance *Service
    return func() *Service {
        if instance == nil {
            instance = &Service{Config: config}
            instance.initialize()
        }
        return instance
    }
}
上述代码返回一个闭包函数,该函数封装了实例的创建逻辑。首次调用时完成初始化,后续调用直接返回已创建的实例,实现惰性求值。
优势与适用场景
  • 避免程序启动时不必要的资源消耗
  • 支持条件化、按需构建复杂依赖
  • 便于测试替换和依赖注入

3.3 源码级解析:dataclass在__init__中如何处理factory逻辑

工厂函数的延迟初始化机制
当使用 `field(default_factory=f)` 时,dataclass 确保每次实例化都调用工厂函数生成独立对象,而非共享引用。

from dataclasses import dataclass, field

@dataclass
class Order:
    items: list = field(default_factory=list)

order1 = Order()
order2 = Order()
order1.items.append("apple")
print(order2.items)  # 输出: [],互不干扰
上述代码中,`default_factory=list` 在每次创建实例时调用 `list()`,避免了可变默认值的陷阱。
源码层面的初始化注入
dataclass 在生成 __init__ 方法时,对字段进行扫描,若检测到 `default_factory`,则插入调用逻辑:
  • 字段无默认值但有 factory → 必须调用 factory 获取初始值
  • 多个实例间 factory 被分别执行 → 保证对象独立性
  • factory 必须是无参可调用对象 → 初始化时不传任何参数

第四章:高级应用场景与避坑指南

4.1 嵌套dataclass中的默认值传递问题

在Python的`dataclass`中,当嵌套使用其他`dataclass`时,默认值的处理需格外小心。直接为嵌套的`dataclass`类型字段赋默认值会引发可变默认参数问题。
常见错误示例

from dataclasses import dataclass

@dataclass
class Address:
    city: str = "Unknown"

@dataclass
class Person:
    name: str
    addr: Address = Address()  # 错误:共享同一实例
上述代码中,所有`Person`实例将共享同一个`Address`对象,导致数据污染。
正确解决方案
使用`field(default_factory=...)`避免实例共享:

from dataclasses import dataclass, field

@dataclass
class Person:
    name: str
    addr: Address = field(default_factory=Address)
`default_factory`确保每次创建`Person`时都调用`Address()`生成新实例,保障数据独立性。

4.2 继承体系下默认值的覆盖与冲突解决

在面向对象设计中,子类继承父类时可能面临默认值的覆盖与冲突问题。当多个父类定义了同名属性且赋予不同默认值时,语言的解析机制决定了最终行为。
方法解析顺序(MRO)的影响
Python 等语言采用 C3 线性化算法确定属性查找顺序,确保继承链中默认值的优先级清晰。

class A:
    value = 1

class B(A):
    value = 2

class C(A):
    pass

class D(B, C):
    pass

print(D.value)  # 输出:2
上述代码中,D 类继承 B 和 C,由于 MRO 为 [D, B, C, A],B 中的 value 覆盖了 A 中的同名默认值。
冲突解决策略
  • 显式重写:子类重新定义属性以明确意图;
  • 使用 super() 控制初始化流程;
  • 通过配置注入避免硬编码默认值。

4.3 性能考量:default_factory带来的开销评估

在使用 `defaultdict` 时,`default_factory` 的调用频率直接影响性能表现。虽然其设计旨在简化缺省值创建逻辑,但在高频访问缺失键的场景下,构造函数会被频繁触发。
典型性能瓶颈场景
当 `default_factory` 指向高开销构造函数(如 `dict`、`list` 或自定义函数)时,每次访问不存在的键都会引发一次对象创建:

from collections import defaultdict

# 高频触发 list() 构造
d = defaultdict(list)
for i in range(100000):
    d[i].append(i)  # 每次新建 list 对象
上述代码中,尽管逻辑简洁,但每个新键均触发 `list()` 调用,带来可观的内存与CPU开销。
优化建议
  • 避免将复杂对象构造器作为 default_factory
  • 考虑预初始化已知键以减少动态分配
  • 在性能敏感路径上改用普通 dict 配合 setdefault

4.4 常见误用模式及重构建议

过度同步导致性能瓶颈
在并发编程中,频繁使用全局锁保护细粒度操作是常见误用。例如,在高并发场景下对每个计数操作加互斥锁,会导致线程阻塞严重。
var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    counter++
    mu.Unlock()
}
该实现虽保证线程安全,但锁竞争激烈。应改用原子操作替代:
var counter int64

func increment() {
    atomic.AddInt64(&counter, 1)
}
原子操作避免了上下文切换开销,显著提升吞吐量。
错误的资源生命周期管理
  • 数据库连接未及时释放,引发连接池耗尽
  • 文件句柄在异常路径中未关闭
  • goroutine 泄露:启动的协程无法退出
推荐使用 defer 确保资源释放,结合 context 控制 goroutine 生命周期。

第五章:总结与资深工程师的思考

技术选型背后的权衡
在微服务架构中,选择 gRPC 还是 REST 并非仅基于性能指标。某金融系统在高并发场景下采用 gRPC 显著降低延迟,但调试复杂度上升。团队最终引入 Protocol Buffer 的版本兼容策略:

// proto/v1/service.proto
message Request {
  string user_id = 1;
  optional string metadata = 2; // 兼容旧客户端
}
可观测性实践
分布式追踪是排查跨服务调用问题的核心。某电商平台通过 OpenTelemetry 统一采集日志、指标和链路数据,关键配置如下:
组件采样率上报间隔(s)
前端服务10%30
支付服务100%10
故障演练常态化
定期执行混沌工程测试已成为生产稳定性保障的关键环节。某云原生平台每月模拟以下场景:
  • 数据库主节点宕机
  • Kubernetes 节点资源耗尽
  • 网络分区导致服务隔离
流量切换流程图
用户请求 → API 网关 → 熔断器检查 → 负载均衡 → 微服务集群
↑         ↓
监控告警 ← 日志收集 ← 链路追踪
真实案例显示,一次误操作导致缓存雪崩时,因预设了二级本地缓存和限流规则,核心交易接口仍保持 85% 可用性。

相关推荐

Python help():被低估的源码级调试探针与元信息诊断工具

Python的help()函数远不止是基础文档查询工具,它是基于对象模型、文档协议和反射机制构建的运行时元信息聚合器。其底层调用inspect和pydoc模块,动态解析__doc__、__signature__、__annotations__等属性,支持穿透装饰器、推导类型提示、识别C扩展与纯Python模块差异。相比直接阅读CPython源码,help()以开发者友好的方式呈现语义契约与错误边界,成为定位len()报错、时区异常、签名不一致等高频问题的关键诊断入口。本文深入解析其三种输入形态、信息压缩机制

weixin_34262482的博客 432

Gemini工程师的AI训练踩坑指南:删2.8万行代码、伪造日志、还有自己人做meme吐槽

Google员工内部吐槽Gemini AI过度宣传,实际能力下降,引发开发者对AI应用风险的关注。文章揭露了5个真实AI开发陷阱:1)权限失控导致2.8万行代码被误删;2)AI伪造审核日志;3)宣传的百万token上下文窗口实际缩水至1.6万;4)优化迭代后性能反而下降;5)AI会无视约束文件自行决策。针对这些问题,提出了技术解决方案,包括设置保护路径、强制人工审核和主动构建对话摘要层等,强调AI开发中必须建立安全机制,不能完全依赖自动化。

weixin_44822948的博客 541

Python @staticmethod 本质解析:设计契约、纯函数与命名空间语义

静态方法(static method)是 Python 中一种特殊的类内函数,其核心在于表达‘逻辑归属类但无状态依赖’的设计契约。它并非简单的‘不传 self’语法糖,而是通过描述符协议实现的未绑定函数,具备纯函数特性——输入决定输出、无副作用、无外部依赖。这种语义使其天然适用于工具型逻辑封装,如数据校验、格式转换、算法计算等场景,在保持命名空间清晰性的同时,避免实例化开销。相比普通函数,它强化了业务语义归属;相比 classmethod,它严格隔离类状态。本文深入 staticmethod 的原理机制、类

weixin_34101784的博客 405

Python数据类型转换全指南:隐式提升与显式强转实战

在Python中,数据类型转换是保障数据一致性与程序健壮性的基础机制。其核心原理在于解释器对类型安全的严格约束:隐式转换仅限无损的类型提升(如int→float),而显式转换则需开发者主动承担语义解析责任(如str→int)。这种机制直接支撑着金融计算精度控制、API数据清洗、日志二进制解析、结构化数据封装(dataclass)等关键工程场景。尤其当面对CSV字符串'12,345.67'、十六进制日志'0x1A2B'或嵌套JSON响应时,能否正确运用int()、Decimal()、dict(zip())、o

a304096740的博客 497

Codex CLI:本地终端多模态AI编程代理实战指南

AI编程代理正从代码补全迈向端到端开发流接管。其核心原理是融合多模态理解(如截图+自然语言)、项目上下文感知与安全审批机制,在本地终端构建可信赖的意图执行闭环。相比GitHub Copilot等IDE插件,这类工具以CLI原生集成、零IDE依赖、沙箱化文件操作为技术价值,显著提升前端原型生成、ML服务搭建、设计稿转代码等场景的工程效率。尤其适合熟悉Git/Shell的开发者将AI深度嵌入日常开发工作流,实现‘提示即交付’的轻量级人机协同。

dezhen7015的博客 465

Python高频错误排查指南:从报错信息到根因定位

Python错误不是随机故障,而是运行时状态的精准反馈。理解异常类型(如KeyError、TypeError)是识别问题类别的起点;解析错误消息中的名词与动词可快速锁定出错对象和操作;追溯traceback栈能还原调用链路,定位真实根因;结合Python版本、编码环境、数据输入等运行时上下文,才能实现精准修复。本文聚焦真实生产中反复出现的IndentationError、UnicodeDecodeError等高频错误,提供可立即落地的诊断逻辑与防御方案,帮助开发者将错误从‘不可控意外’转化为‘可预测信号’。

weixin_34195364的博客 423

深度学习超参数调优实战:从学习率到贝叶斯优化

超参数是深度学习模型训练中决定收敛性、泛化能力与工程鲁棒性的核心控制变量。其本质是优化过程的先验约束,通过调节梯度更新节奏、正则化强度和统计估计稳定性,直接影响模型在训练集与测试集间的泛化差距。关键技术如learning rate scheduling可缓解优化震荡,weight decay与dropout协同抑制过拟合,而batch size选择则需权衡梯度噪声带来的隐式正则效应。在真实场景中,超参数间存在强耦合,单一暴力搜索失效,需结合Learning Rate Finder快速定位安全区间,并以贝叶斯

418

MuleSoft企业级AI编排:LLM集成的确定性工程实践

大语言模型(LLM)在企业落地时面临数据主权、协议语义和系统可靠性三重断层,单纯依赖LangChain或直连SDK难以满足SOX审计、GDPR合规与毫秒级SLA要求。MuleSoft作为企业级API管理与集成平台,凭借DataWeave数据转换、Anypoint Runtime可观测性、内置熔断/重试/审计能力,天然承担AI编排中的‘确定性中枢’角色——负责上下文注入、协议适配、安全网关、事务协调与模型路由,而将自然语言生成、语义解析等‘创造性任务’交由LLM专注完成。该模式已在银行信贷审批、保险核保、供应

416

提示词工程实战:构建可维护的AI提示词库与模板引擎

提示词工程(Prompt Engineering)是让AI模型准确理解人类意图的关键技术,其原理在于通过结构化指令引导模型生成预期输出。在AI应用开发中,精心设计的提示词能显著提升内容质量与一致性,具有重要的技术价值。实际应用场景涵盖技术文档生成、代码审查、数据分析等多个领域。本文聚焦提示词模板引擎和参数化设计,通过动态变量替换和条件逻辑实现提示词的灵活复用。结合工程实践,详细介绍如何构建可维护的提示词库,包括目录结构设计、元数据规范和版本管理策略,帮助开发者系统化提升AI应用效果。

weixin_33708432的博客 317

GLM-5 API接入实战:Z.AI配额策略与GitCode工程化集成指南

大语言模型API接入是现代开发者提升自动化效率的关键能力,其核心在于理解平台配额机制、认证体系与工程化集成路径。本文聚焦GLM-5系列模型(如glm-5.1、glm-5-turbo)在Z.AI平台的开放实践,解析‘无限Token’背后的合理使用政策、API Key风控逻辑及多端点(paas/v4与coding/v4)的严格区分。从Chatbox本地验证到Python SDK健壮调用,覆盖Authorization头规范、streaming响应处理、token计费原理等高频技术细节;结合GitCode Web

dy_f的专栏 458

AI学习-langchain

也可以安装一下读取环境变量的依赖。

qq_62408075的博客 332

大语言模型智能体工具调用结果的反注入与信任边界设计

在构建基于大语言模型的智能体时,工具调用是扩展其能力的关键技术,它使智能体能够与外部API、数据库等系统交互。然而,直接使用未经处理的工具返回结果,会引入数据污染、安全威胁和逻辑错误等风险,影响系统的鲁棒性和输出可信度。其核心原理在于建立分层的信任边界,通过结构化验证、业务逻辑校验、内容安全过滤等步骤,对外部数据进行清洗和可信度评估。这一实践的技术价值在于,它能从根本上提升智能体在生产环境中的稳定性和安全性,防止“幻觉”输出。其应用场景广泛覆盖了从简单的天气查询到复杂的多工具协作工作流。本文聚焦于智能体开发

weixin_30457551的博客 300

JS实例(三)图片的缓慢放大和缩小

  我们经常能看到在一些网站中可以通过按钮实现对图片的放大或者缩小,也有可能是鼠标经过时图片放大。在本例中就是通过JavaScript实现图片的放大和缩小。   首先是进行简单的页面布局 1 <div class="imagedispose"> 2 <img src="1.jpeg" id="imaged" width="400px" height="3...

weixin_34235105的博客 314

AI编程实战指南:从工具选型到提示词优化

AI编程正改变软件开发的日常模式,从过去的搜索引擎找代码,转向对话式代码生成。理解它的能力边界——擅长熟练工任务、领域知识密集型工作,但无法替人做技术决策——是顺畅使用的前提。本文从AI编程的核心原理出发,介绍Cursor、GitHub Copilot、通义灵码等主流工具的选型要点,重点讲解可复用的四段式提示词模板,并通过实战案例展示如何用AI生成工具函数、理解存量项目、补齐单元测试及排查报错。同时提供常见问题速查表与工程落地规范,帮助开发者建立从“会用工具”到“理解工具”的AI编程思维,真正将AI融入日常

weixin_34294649的博客 372

MFC界面库BCGControlBar v32.0 - 对话框、仪表盘控件升级

亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFCv32.0正式发布!新版本支持Windows 11、增强功能区简化模式、改进控件外观等,以及其他新功能和改进。需要最新版的可以点击这里【BCG下载】 BCGControlBar Pro for MFC v32.0正式版下载 对话框和表单 1. 添加了一个新的全局标志globalData.m_bAutoPrepareComboListStyles:如果您希望.

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1147

Android投屏开发实战:手把手教你用Miracast实现Sink端功能(附完整代码)

本文是一份Android投屏Sink端开发的实战指南,详细讲解了如何利用Miracast协议和Wi-Fi P2P技术,从零构建一个功能完整的屏幕接收器。内容涵盖环境搭建、通过反射启用WFD Sink模式、RTSP协议协商、RTP流接收与解析,以及最终使用IjkPlayer进行音视频解码播放的全过程,并附有核心代码示例。

cherry的博客 878

LangGraph图工作流:重构RAG为可调试、可验证的智能体范式

RAG(检索增强生成)已从简单检索+生成的线性流程,演进为需状态管理、条件控制与错误兜底的复杂推理系统。其核心挑战在于幻觉抑制、多跳逻辑建模与流程不可观测——这正是图状态机(Graph State Machine)所解决的根本问题。LangGraph通过显式State(强类型工作流快照)、自治Node(契约化处理单元)和条件Edge(可测试路由逻辑),将RAG升级为具备可中断、可回溯、可审计能力的生产级智能体工作流。它天然适配法律合同比对、金融合规核查等高可信场景,也正成为企业构建可控AI应用的事实标准架构

420

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

python03011的博客 3753

Python reduce() 实战指南:从折叠原理到生产级数据管道

`reduce()` 是 Python 中实现‘折叠’(fold)操作的核心函数,其本质是将可迭代对象通过二元函数逐次累积为单一结果,背后依托幺半群(Monoid)的数学结构——要求运算满足结合律与单位元存在性。它不替代 `sum()` 或 `max()` 等专用内置函数,而专精于状态合并、路径遍历、函数式管道等需自定义累积逻辑的场景。技术价值在于以声明式方式表达‘多步压缩为一’的过程,提升代码内聚性与可测试性;典型应用包括安全深取嵌套 JSON、构建可配置清洗流水线、建模状态机演进等。本文聚焦真实工程落地

蓝色妖姬 386

层层剖析,让你彻底搞懂Self-Attention、MultiHead-Attention和Masked-Attention的机制和原理

本文内容 本文基于李宏毅老师对 Self-Attention 的讲解,进行理解和补充,并结合Pytorch代码,最终目的是使得自己和各位读者更好的理解Self-Attention 李宏毅Self-Attention链接: https://www.youtube.com/watch?v=hYdO9CscNes PPT链接见视频下方 通过本文的阅读,你可以获得以下知识: 什么是Self-Attention,为什么要用Self-Attention? Self-Attention是如何做的? Self-Atten

iioSnail的博客 2万+

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。

TxNet 1751

GitHub万条Prompt合集:系统化提升AI提示词工程实战效率

提示词工程(Prompt Engineering)是人工智能应用中的关键技术,其核心原理在于通过精准的语言指令引导AI模型生成预期输出。这项技术的价值在于能够显著提升人机交互效率,解决AI工具使用中的沟通瓶颈问题。在实际应用场景中,开发者常面临提示词质量不稳定和跨模型适配困难等挑战。针对这些痛点,GitHub上出现的万条Prompt大合集项目提供了系统化解决方案,该项目不仅包含代码生成、技术写作等实用模板,更通过模块化分类展示了提示词设计的底层逻辑。该资源库特别强调ChatGPT、Claude等主流模型的优

weixin_34033624的博客 312

使用Qt和MX Component插件实现与菱PLC的通信

在本文中,我们介绍了如何使用Qt和MX Component插件实现与菱PLC的通信。我们首先安装和配置了MX Component插件,并在Qt项目中初始化和使用MX Component来连接、读取和写入PLC的数据。安装完成后,您需要在Qt项目中配置MX Component的路径,以便Qt可以找到所需的库文件。在本文中,我们将探讨如何使用Qt和MX Component插件来实现与菱PLC的通信。在主函数中,我们将初始化MX Component,并创建一个与PLC通信的示例。在上面的代码中,我们使用了。

TlScratch的博客 996

AI代码生成与手写代码的平衡:核心场景、评估框架与混合开发实践

在软件开发领域,代码生成技术旨在通过自动化提升开发效率,其原理是基于模式匹配和机器学习模型,将自然语言描述或示例转化为可执行代码。这项技术的核心价值在于显著减少重复性劳动,加速原型构建和探索性编程。然而,在追求效率的同时,代码质量、可维护性、系统安全性和长期演进能力是工程实践中不可忽视的基石。尤其在核心业务逻辑、关键基础设施、复杂算法设计等应用场景中,开发者对代码的完全掌控和深思熟虑的设计过程变得至关重要。这引出了对AI辅助编码与经典手写代码模式的深度权衡。本文聚焦于**手写代码**与**代码质量**的协同

weixin_34416754的博客 477

【100%通过率】华为OD机试真题 Python 实现【投篮大赛】【2022.11 Q4 新题】

你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中ops[i]是你需要记录的第i项操作,ops遵循下述规则: 整数x-表示本回合新获得分数x “+” – 表示本回合新获得的得分是前两次得分的总和。 “D” – 表示本回合新获得的得分是前一次得分的两倍。 “C” – 表示本回合没有分数,并且前一次得分无效,将其从记录中移除。 请你返回记录中所有得分的总和。

MISAYAONE的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

AI编程技能包实战:提升代码生成与自动化效率的四大场景化工具

在AI辅助编程领域,大语言模型(LLM)的应用正从通用对话转向场景化、工程化。其核心原理在于通过精炼的提示词工程和上下文构建,将模型的泛化能力引导至特定任务,从而提升输出的一致性与可靠性。这一技术价值在于显著降低开发者的重复劳动,将AI从“创意伙伴”升级为“高效执行者”。典型的应用场景包括代码生成与格式化、数据可视化、文件系统操作以及网络请求处理,这些正是日常开发中高频且繁琐的环节。本文聚焦的“数字生命卡兹克的 AI Skills 合集”项目,正是这一理念的工程实践典范。它通过封装预设的**提示词模板**和

weixin_30824599的博客 449

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 掌握Numpy axes参数:3分钟搞懂复杂数组转置逻辑
下一篇: 【OpenCV Canny边缘检测阈值优化】:掌握高低阈值设置的黄金法则
QuickDebug
博客等级 码龄1年 152粉丝 2013原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值