【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用
目录
一、getters
二、 mapState
三、 mapGetters
四、 mapMutations
五、 mapActions
学到这儿来个小总结:四个map方法的使用
总结不易~ 本章节对我有很大的收获, 希望对你也是!!!
本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.comhttps://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/25_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_getters
通过前面介绍的vuex功能还是十分强大,但是对于模板中有很多不同需求的话,我们就不要自己来写js表达式了,当功能过于复杂,我们就要封装一个容器来进行存储这个功能
就比如模板要将当前求和放大10倍
<h1>当前求和为:{{ $store.state.sum }}</h1><h3>放大10倍的和:{{ $store.state.sum * 10 }}</h3>
这里功能开始变得复杂,那么就可以考虑是不是可以封装到计算属性里面呢?computed
<h3>放大10倍的和:{{ dahe()}}</h3>computed: {dahe() {return this.$store.state.sum * 10}},
但是这里就有一个问题,这个方法就只能自己组件里面使用,不能让组件之间进行共享,所以这里就引入了新的vuex配置项,getters
一、getters
// 准备getters——用于将state里面的数据进行加工
const getters = {bigSum(state) {return state.sum * 10}
}// 创建 并 暴露store
export default new Vuex.Store({actions,mutations,state,getters
})
在vuex里面进行创建getters,然后实现你要完成的方法,并且将getters引入store中
那么怎么引入getters的数据到模板中呢?
我将sum修改成1好进行观察
// 准备state——用于存储数据
const state = {sum: 1
}
利用生命周期挂载输出MyCount里面的$store
能够看到我们实现的bigSum函数值为10,那么获取就可以直接在模板中访问我们想要得到的值
<h3>放大10倍的和:{{ $store.getters.bigSum }}</h3>
所以getters就是拿着数据源里面的数据进行加工然后再给你返回加工后的值。由此,state像极了data,而getters像极了computed计算属性
回到MyCounst组件中, 我们发现一遍遍的书写$store.state.……实在是过于麻烦,我们的终极目标就是只写sum、bigSum、school、subject
那有一种办法就是利用计算属性,可以实现:这样就解释了sum并不是函数名,而是一个计算属性
<h1>当前求和为:{{ sum }}</h1><h3>放大10倍的和:{{ bigSum }}</h3><h3>我在{{ school }},学习{{ subject }}</h3>computed: {sum: function asdhaksdjaslkdjasdkalskdl() {return this.$store.state.sum},school() {return this.$store.state.school},subject() {return this.$store.state.subject},bigSum() {return this.$store.getters.bigSum},},
但是!不出意外的话就要出意外了!你不觉得这些计算属性里面的函数值都很类似吗? 也同样是return this.$store.state……,有没有什么方法可以直接写一个test函数,然后生成return this.$store.state这么一段,让我们直接进行调用呢!!
有的兄弟有的!Vue的设计者也想到了这一点,就给我们设计好了mapState
本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.comhttps://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/26_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_mapState%E5%92%8CmapGetters
二、 mapState
import { mapState } from 'vuex'
我修改掉函数名, 只是想证明函数名跟配对的属性值是一组,好让mapState工作的时候进行映射能看看清楚是同一组数据在进行映射
mounted() {const x = mapState({'he':'sum'})console.log(x)}
由于mapState是要求传入的对象,那么就是key-value进行配对,那么key值永远都是一个字符串,可以用简写形式, 但是value却不行,如果value就写成sum, 他就会去寻找sum这个变量,但是我们的sum是一个属性名啊,也是一个字符串,所以sum要加上引号,让他是一个字符串
mounted() {const x = mapState({he:'sum', xuexiao:'school', xueke:'subject'})console.log(x)}
但是这里引入mapState确保错了!这里就要考es6的基本功怎么样了
由于对象里面是不能直接写对象的,否则就会报错
那么我们要是有个obj2也是对象,怎么添加到obj里面呢?
let obj2 = { x: 100, y: 200 }let obj = {a: 1,b: 2,...obj2}
写成...obj2就不会报错了,这样就是默认将obj里面的元素合并到obj里面!
所以, 你看清楚mapState在控制台中是一个对象!而computed计算属性也是一个对象,就不能直接放在computed里面 而是要加...mapState才是能够将当前的mapState对象里面的值合并到computed里面!
computed: {// 借助mapState生成计算属性, 从state中读取数据 (对象写法)...mapState({he:'sum', xuexiao:'school', xueke:'subject'})},
此时的computed计算属性里面就相当于,我写了那么多一长串的代码,页面仍然更新正常,怎么是不是超级方便!
唯一的不一样就是用mapState生成出来的计算属性,又单独在开发者工具里面多开一行,是隶属于计算属性的一栏,告诉开发者是你利用mapState来生成的一堆绑定数据
这里就先回到最初的命名规则
...mapState({sum:'sum', school:'school', subject:'subject'}),
那么就一定有人说,啊呀!可以用es6简写办法!
...mapState({sum, school:'school', subject:'subject'}),
现在可以看到,当前的sum就会被Vue解析成sum: sum, 仍然会遇到上面那个问题,变成key-value值,上面的sum会被解析成'sum' 但是后面那个sum会被去寻找sum变量,找不到而报错
那么另一种数组写法,就是采用mapState映射的关系告诉Vue,你这个计算属性的名字是叫'sum',是从'sum'这个 state的sum属性中来得到的数据,所以这里的命名就必须要跟state的属性名字一模一样,不能在跟上面he作为计算属性!!!
computed: {// 数组写法...mapState(['sum', 'school', 'subject']),},
三、 mapGetters
所以下面还有一个从getters里面取到的值也是一样的获取效果
import { mapState, mapGetters } from 'vuex'// 对象写法...mapGetters({bigSum:'bigSum'})//数组写法...mapGetters(['bigSum'])
yihaohhh/我爱Vue - Gitee.comhttps://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/27_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_mapMutations%E5%92%8CmapActions 本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.com
https://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/27_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_mapMutations%E5%92%8CmapActions
四、 mapMutations
学懂了上面的计算属性,后面还有两个就好理解了!对于commit提交事件也是这么写,进行引入mapMutations
import { mapState, mapGetters, mapMutations } from 'vuex' methods: {// increment() {// this.$store.commit('JIA', this.n)// },// decrement() {// this.$store.commit('JIAN', this.n)// },...mapMutations({increment:'JIA', decrement:'JIAN'}),
但是当我点击+ 却报错了,而'JIA'却别调用了!
回到vuex里面观察是不是传入值value错误了
// 准备mutations——用于操作数据(state)
const mutations = {JIA(state, value) {console.log(value)console.log('mutations被调用了')state.sum += value},JIAN(state, value) {state.sum -= value}
}
是一个鼠标点击事件,说明就是value传值错误!
原因就是,原本我们自己写的increment函数里面是自己带this.n的参数进行传入mutations来进行接收,但是我们用mapMutations写后,就没有传入参数给他接收,那么就是默认参数event被传入
那么只要我们在模板里面调用函数的时候传参就欧克啦~
<button @click="increment(n)">+</button><button @click="decrement(n)">-</button>data() {return {n:1, // 用户当前选择的数字}},methods: {// increment() {// this.$store.commit('JIA', this.n)// },// decrement() {// this.$store.commit('JIAN', this.n)// },// 借助mapMutations生成对应的方法, 方法中会调用commit去联系mutations// 对象的写法...mapMutations({increment:'JIA', decrement:'JIAN'}),},
数组写法
// 数组的写法...mapMutations(['JIA', 'JIAN']),// 同样 模板里面的调用方法得改<button @click="JIA(n)">+</button><button @click="JIAN(n)">-</button>
这里要与vuex里面的mutations里面实现的方法一致
// 准备mutations——用于操作数据(state)
const mutations = {JIA(state, value) {console.log('mutations被调用了')state.sum += value},JIAN(state, value) {state.sum -= value}
}
五、 mapActions
还有最后一步,引入mapActions
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'// incrementOdd() {// this.$store.dispatch('jiaOdd', this.n)// },// incrementWait() {// this.$store.dispatch('jiaWait', this.n)// }// 对象写法...mapActions({incrementOdd: 'jiaOdd', incrementWait: 'jiaWait'})// 同样是要对调用进行传参<button @click="incrementOdd(n)">当前求和为奇数再加</button><button @click="incrementWait(n)">等一等再加</button>
数组写法
...mapActions(['jiaOdd', 'jiaWait'])// 同样对函数名的调用就要修改了, 因为数组写法就会生成同名的函数名和调用属性<button @click="jiaOdd(n)">当前求和为奇数再加</button><button @click="jiaWait(n)">等一等再加</button>
学到这儿来个小总结:四个map方法的使用
-
mapState方法:用于帮助我们映射
state
中的数据为计算属性computed: {//借助mapState生成计算属性:sum、school、subject(对象写法)...mapState({sum:'sum',school:'school',subject:'subject'}),//借助mapState生成计算属性:sum、school、subject(数组写法)...mapState(['sum','school','subject']),},
-
mapGetters方法:用于帮助我们映射
getters
中的数据为计算属性computed: {//借助mapGetters生成计算属性:bigSum(对象写法)...mapGetters({bigSum:'bigSum'}),//借助mapGetters生成计算属性:bigSum(数组写法)...mapGetters(['bigSum'])},
-
mapActions方法:用于帮助我们生成与
actions
对话的方法,即:包含$store.dispatch(xxx)
的函数methods:{//靠mapActions生成:incrementOdd、incrementWait(对象形式)...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})//靠mapActions生成:incrementOdd、incrementWait(数组形式)...mapActions(['jiaOdd','jiaWait'])}
-
mapMutations方法:用于帮助我们生成与
mutations
对话的方法,即:包含$store.commit(xxx)
的函数methods:{//靠mapActions生成:increment、decrement(对象形式)...mapMutations({increment:'JIA',decrement:'JIAN'}),//靠mapMutations生成:JIA、JIAN(对象形式)...mapMutations(['JIA','JIAN']),}
备注:mapActions与mapMutations使用时,若需要传递参数需要:在模板中绑定事件时传递好参数,否则参数是事件对象。
总结不易~ 本章节对我有很大的收获, 希望对你也是!!!
相关文章:
【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用
目录 一、getters 二、 mapState 三、 mapGetters 四、 mapMutations 五、 mapActions 学到这儿来个小总结:四个map方法的使用 总结不易~ 本章节对我有很大的收获, 希望对你也是!!! 本节素材已上传至Gitee&…...
小程序初始化加载时间优化 步骤思考与总结
回想起来,正确的小程序初始加载时间优化步骤应该为: 一、梳理小程序初始化的步骤,以用户点击小程序为开始(尽可能靠近),以页面渲染出来的时刻为结束—也就是用户感知到的时间。 二、页面渲染时࿰…...
前端弹性布局:用Flexbox构建现代网页的魔法指南
引言:布局的进化史 在网页设计的黑暗时代(2010年前),开发者们用float、position和inline-block这些原始工具进行布局,就像用石器时代的工具建造摩天大楼。直到2012年W3C正式推出Flexbox规范,前端世界终于迎…...
Python基于Django的高校教室管理系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
【金仓数据库征文】_金仓数据库在金融行业的两地三中心容灾架构实践
金仓数据库在金融行业的两地三中心容灾架构实践 🌟嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 引言 随着国家对信息技术应用创新࿰…...
利用多AI协作实现AI编辑器高效开发:创新架构与实践基本构想
在当今快速发展的科技领域,AI技术正以前所未有的速度重塑软件开发的流程和模式。传统的软件开发过程往往需要不同专业人员协同合作,从需求分析到产品设计,再到技术实现,每个环节都需要耗费大量的时间和人力。然而,随着…...
【字节拥抱开源】字节豆包团队开源首发 Seed-Coder 大模型
我们非常高兴地向大家介绍 Seed-Coder,它是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体。Seed-Coder 通过以下亮点促进开放代码模型的发展。 以模型为中心:Seed-Coder主要利用大语言模型&#…...
C++GO语言微服务之gorm框架操作MySQL
目录 01 01-gorm介绍 02 02-MySQL操作回顾 03 03-gorm创建表 04 04-MySQL的init函数说明 05 05-gorm框架提供的MySQL连接池 06 06-gorm插入数据 07 07-gorm查询数据 08 08-gorm更新数据 09 09-gorm软删除-创建表 10 10-gorm软删除-实现 11 10-MySQL的8小时时区问题 …...
Webug4.0靶场通关笔记-靶场搭建方法(3种方法)
目录 一、虚拟机绿色版本 1. 开启phpstudy 2. 访问靶场 二、Docker版本 1.拉取镜像 2.启动镜像 三、源码安装版本 1. 搭建环境 (1)安装PHPStudy (2)WeBug4.0靶场源码 (3)安装Navicat ÿ…...
HTTP/3展望、我应该迁移到HTTP/2吗
1. HTTP/3展望 HTTP/3 基于 QUIC 协议,完全解决了“队头阻塞”问题,弱网环境下的表现会优于 HTTP/2;QUIC 是一个新的传输层协议,建立在 UDP 之上,实现了可靠传输;QUIC 内含了 TLS1.3,只能加密通…...
【Linux基础】系统监控和进程管理指令
目录 ps命令 top命令 kill命令 killall命令 1.1 命令介绍 1.2 命令格式 1.3 常用选项 1.4 示例 1.4.1 交互模式确认 1.4.2 指定信号 shutdown命令 ps命令 作用:查看当前进程信息。 常用选项: 作用 -e 显示所有进程,包括其他用户…...
【Linux实践系列】:进程间通信:万字详解共享内存实现通信
🔥 本文专栏:Linux Linux实践项目 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 人生就像一场马拉松,重要的不是起点,而是坚持到终点的勇气 ★★★ 本文前置知识: …...
无法更新Google Chrome的解决问题
解决问题:原文链接:【百分百成功】Window 10 Google Chrome无法启动更新检查(错误代码为1:0x80004005) google谷歌chrome浏览器无法更新Chrome无法更新至最新版本? 下载了 就是更新Google Chrome了...
CenOS7切换使用界面
永久切换 在开始修改之前,我们首先需要查看当前的启动模式。可以通过以下命令来实现: systemctl get-default执行此命令后,系统会返回当前的默认启动模式,例如graphical.target表示当前默认启动为图形界面模式。 获取root权限&…...
# YOLOv3:深度学习中的目标检测利器
YOLOv3:深度学习中的目标检测利器 引言 在计算机视觉领域,目标检测是一项核心任务,它涉及到识别图像或视频中的物体,并确定它们的位置。随着深度学习技术的快速发展,目标检测算法也在不断进步。YOLO(You …...
2025数维杯数学建模A题完整参考论文(共36页)(含模型、可运行代码、数据)
2025数维杯数学建模A题完整参考论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、符号定义与说明 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.2问题2模型…...
在 Flink + Kafka 实时数仓中,如何确保端到端的 Exactly-Once
在 Flink Kafka 构建实时数仓时,确保端到端的 Exactly-Once(精确一次) 需要从 数据消费(Source)、处理(Processing)、写入(Sink) 三个阶段协同设计,结合 Fli…...
Python数据分析
目录 一、数据分析的核心流程 (一)明确数据分析目标 (二)数据收集 (三)数据清洗 1. 处理缺失值 2. 去除重复值 3. 修正错误值和异常值 (四)数据探索与可视化 1. 计算描述性…...
Java单例模式总结
说明:单例模式的核心是确保一个类只有一个实例,并提供全局访问点。饿汉式和懒汉式是两种常见的实现方式 一、饿汉式和懒汉式 1. 饿汉式(Eager Initialization) public class EagerSingleton {// 类加载时直接初始化实例private…...
《P7167 [eJOI 2020] Fountain (Day1)》
题目描述 大家都知道喷泉吧?现在有一个喷泉由 N 个圆盘组成,从上到下以此编号为 1∼N,第 i 个喷泉的直径为 Di,容量为 Ci,当一个圆盘里的水大于了这个圆盘的容量,那么水就会溢出往下流,直到…...
Pycharm(二十)张量的运算与操作
一、张量的数据类型转换 1.演示data.type(trch.DoubleTensor) #1.创建张量对象 [6 6 6;6 6 6] datatorch.full([2,3],6) print(data.dtype)#默认为torch.int64(LongTensor) #2.转化为double类型 datadata.type(torch.DoubleTensor) print(data.dtype) #3.转换成int类型 datad…...
JVM之内存管理(二)
部分内容来源:JavaGuide二哥Java 说⼀下 JDK1.6、1.7、1.8 内存区域的变化? JDK1.6、1.7/1.8 内存区域发⽣了变化,主要体现在⽅法区的实现: JDK1.6 常量池在方法区 JDK1.7 JDK1.6 使⽤永久代实现⽅法区:JDK1.7 时发…...
蓝桥杯嵌入式第十一届省赛真题
(一)题目 首先要知道P37对应的CubeMx上面的引脚是PB15,给PB15设置成ADC采集。使用到的PA6和PA7的端口要进行定时器配置 100Hz80 000 000/800 *1000 200Hz80 000 000/400 *1000 ADC采集只需要选择好adc1、adc2 再选择好它的通道就可以了,不…...
LLMs之ChatGPT:《Connecting GitHub to ChatGPT deep research》翻译与解读
LLMs之ChatGPT:《Connecting GitHub to ChatGPT deep research》翻译与解读 导读:这篇OpenAI帮助文档全面介绍了将GitHub连接到ChatGPT进行深度代码研究的方法、优势和注意事项。通过连接GitHub,用户可以充分利用ChatGPT强大的代码理解和生成…...
多环境开发
# 应用环境(公共环境,写一些公共配置) spring:profiles:active: dev --- # 设置环境 # 生产环境 spring:config:activate:on-profile: pro server:port: 80 --- # 开发环境 spring:config:activate:on-profile: dev server:port: 81 --- # 测试环境 spring:config:activate:on-…...
游戏引擎学习第269天:清理菜单绘制
回顾并为今天的工作设定目标 昨天我们对调试系统中的菜单处理做了一些清理工作,今天我想继续对它们的展示和使用方式进行一些打磨和改进。今天的计划还不完全确定,我还没有完全决定要做什么,但是我希望能够完成这部分工作,所以我…...
《解锁React Native与Flutter:社交应用启动速度优化秘籍》
React Native和Flutter作为当下热门的跨平台开发框架,在优化应用启动性能方面各有千秋。今天,我们就深入剖析它们独特的策略与方法。 React Native应用的初始包大小对启动速度影响显著。在打包阶段,通过精准分析依赖,去除未使用的…...
Web3 初学者的第一个实战项目:留言上链 DApp
目录 📌 项目简介:留言上链 DApp(MessageBoard DApp) 🧠 技术栈 🔶 1. Solidity 智能合约代码(MessageBoard.sol) 🔷 2. 前端代码(index.html script.js…...
Innovus 25.1 版本更新:助力数字后端物理设计新飞跃
在数字后端物理设计领域,每一次工具的更新迭代都可能为项目带来巨大的效率提升与品质优化。今天,就让我们一同聚焦 Innovus 25.1 版本(即 25.10 版本)的更新要点,探寻其中蕴藏的创新能量。 一、核心功能的强势进 AI…...
Git简介和发展
Git 简介 Git是一个开源的分布式版本控制系统,跨平台,支持Windows、Linux、MacOS。主要是用于项目的版本管理,是由林纳斯托瓦兹(Linux Torvalds)在2005年为Linux内核开发而创建。 起因 在2002年至2005年间,Linux内核开发团队使…...
adb 实用命令汇总
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 基础adb命令 # 重启adb adb kill-server# 查看已连接的设备 adb devices# 进入命令行 adb shell# 使用 -s 参数来指定设备 adb -s <设备序列号> shell…...
DAX 权威指南1:DAX计算、表函数与计算上下文
参考《DAX 权威指南 第二版》 文章目录 二、DAX简介2.1 理解 DAX 计算2.2 计算列和度量值2.3 变量2.3.1 VAR简介2.3.2 VAR的特性 2.4 DAX 错误处理2.4.1 DAX 错误类型2.4.1.1 转换错误2.4.1.2 算术运算错误2.4.1.3 空值或 缺失值 2.4.2 使用IFERROR函数拦截错误2.4.2.1 安全地进…...
使用fdisk 、gdisk管理分区
用 fdisk 管理分区 fdisk 命令工具默认将磁盘划分为 mbr 格式的分区 命令: fdisk 设备名 fdisk 命令以交互方式进行操作的,在菜单中选择相应功能键即可 [rootlocalhost ~]# fdisk /dev/sda # 对 sda 进行分区 Command (m for help): # 进入 fdis…...
Python----神经网络(《Deep Residual Learning for Image Recognition》论文和ResNet网络结构)
一、论文 1.1、论文基本信息 标题:Deep Residual Learning for Image Recognition 作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 单位:Microsoft Research 会议:CVPR 2016 主要贡献:提出了一种深度残…...
PostgreSQL 的 pg_collation_actual_version 函数
PostgreSQL 的 pg_collation_actual_version 函数 pg_collation_actual_version 是 PostgreSQL 中用于检查排序规则实际版本信息的函数,主要与 ICU (International Components for Unicode) 排序规则相关。 函数基本概念 函数定义 pg_collation_actual_version(…...
使用Simulink开发Autosar Nvm存储逻辑
文章目录 前言Autosar Nvm接口设计模型及接口生成代码及arxmlRTE接口mappingRTE代码分析总结 前言 之前介绍过Simulink开发Dem故障触发逻辑,本文接着介绍另外一个常用的功能-Nvm存储的实现。 Autosar Nvm接口 Autosar Nvm中一般在上电初始化的时调用Nvm_ReadAll获…...
嵌入式STM32学习——继电器
继电器模块引脚说明 VCC(): 供电正极。连接此引脚到电源(通常是直流电源),以提供继电器线圈所需的电流。 GND(-): 地。连接此引脚到电源的负极或地。 IN(或…...
更换内存条会影响电脑的IP地址吗?——全面解析
在日常电脑维护和升级过程中,许多用户都会遇到需要更换内存条的情况。与此同时,不少用户也担心硬件更换是否会影响电脑的网络配置,特别是IP地址的设置。本文将详细探讨更换内存条与IP地址之间的关系,帮助读者理解这两者之间的本质…...
AWS SNS:解锁高并发消息通知与系统集成的云端利器
导语 在分布式系统架构中,如何实现高效、可靠的消息通知与跨服务通信?AWS Simple Notification Service(SNS)作为全托管的发布/订阅(Pub/Sub)服务,正在成为企业构建弹性系统的核心组件。本文深度…...
【Java ee初阶】网络编程 TCP
TCP的socket api 两个核心的类 ServerSocket 创建一个这样的对象,就相当于打开了一个socket文件。 这个socket对象是给服务器专门使用的 这个类本身不负责发送接收。 主要负责“建立连接” Socket 创建一个这样的对象,也就相当于打开了一个socket文…...
达索MODSIM实施成本高吗?哪家服务商靠谱?
在数字化转型的浪潮中,越来越多的制造企业开始关注达索系统的MODSIM技术。记得去年参加行业峰会时,一位来自汽车零部件企业的技术总监向我倾诉了他的困扰:"我们都知道MODSIM能提升研发效率,但听说实施成本很高,又…...
ISP接口隔离原则
任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。ISP强调使用多个特定的接口,而不是一个总接口,避免依赖不需要的接口。即不需要则不应该知道。 ISP特点 降低耦合度:客户端只依赖它需要的接口࿰…...
AI Agent(8):安全与伦理考量
引言 AI Agent作为具有一定自主性的智能系统,其行为可能产生深远影响。确保这些系统安全、可靠、符合伦理标准,并遵守相关法规,不仅是技术挑战,也是社会责任。 随着AI Agent能力的增强,其潜在风险也在增加,从数据泄露到决策偏见,从自主性滥用到责任归属不清,这些问题…...
Python3虚拟环境与包管理:项目隔离的艺术
Python3虚拟环境与包管理 为什么需要虚拟环境?虚拟环境工具:你的岛屿建设者一、使用venv创建虚拟环境创建虚拟环境激活虚拟环境退出虚拟环境 二、 包管理:岛上的补给系统2.1 pip:Python的包安装工具基本用法依赖管理 2.2 高级包管…...
23、DeepSeekMath论文笔记(GRPO)
DeepSeekMath论文笔记 0、研究背景与目标1、GRPO结构GRPO结构PPO知识点**1. PPO的网络模型结构****2. GAE(广义优势估计)原理****1. 优势函数的定义**2.GAE(广义优势估计) 2、关键技术与方法3、核心实验结果4、结论与未来方向关键…...
Python自动化-python基础(下)
六、带参数的装饰器 七、函数生成器 运行结果: 八、通过反射操作对象方法 1.添加和覆盖对象方法 2.删除对象方法 通过使用内建函数: delattr() # 删除 x.a() print("通过反射删除之后") delattr(x, "a") x.a()3 通过反射判断对象是否有指定…...
用Python绘制动态彩色ASCII爱心:技术深度与创意结合
引言 在技术博客的世界里,代码不仅仅是解决问题的工具,更可以是表达创意的媒介。今天我将分享一个独特的Python爱心代码项目,它结合了数学之美、ASCII艺术和动态效果,展示了Python编程的无限可能。这个项目不仅能运行展示出漂亮的…...
【C++】红黑树
1.红黑树的概念 是一种二叉搜索树,在每个节点上增加一个存储位表示节点的颜色,Red或black,通过对任何一条从根到叶子的路径上各个结点着色方式的限制,确保没有一条路径会比其他路径长出俩倍,是接近平衡的。 2.红黑树…...
链表头插法的优化补充、尾插法完结!
头插法的优化补充 这边我们将考虑到可以将动态创建链表,和插入新链表到链表头前方,成为新链表头的方法分开,使其自由度上升,在创建完链表后,还可以添加链表元素到成为新的链表头。 就是说可以单独的调用这个insertHea…...
Java多线程(超详细版!!)
Java多线程(超详细版!!) 文章目录 Java多线程(超详细版!!)1. 线程 进程 多线程2.线程实现2.1线程创建2.1.1 继承Thread类2.1.2 实现runnable接口2.1.2.1 思考:为什么推荐使用runnable接口?2.1.2.1.1 更高的…...