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

Lua学习笔记

文章目录

  • 前言
  • 1. Lua的数据类型
  • 2. Lua的控制结构
    • 2.1 循环
      • 2.1.1 for
      • 2.1.1.1 数值循环
      • 2.1.1.2 迭代循环
      • 2.1.2 while
      • 2.1.3 repeat-until
    • 2.2 条件语句
    • 2.3 函数
  • 3. Lua中的变量作用域


前言

Lua是一种轻量级的、高效的、可扩展的脚本语言,由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)的一个小团队开发。Lua的设计目标是成为一种嵌入式的脚本语言,因此它的语法简单、易于学习、易于嵌入其他程序中,并且运行速度非常快。
所以Lua是一种上手成本很低的脚本语言。
这里放下Lua代码与注释,方便快速上手,下再详细介绍

--注释方式
--[[多行注释
--]]
--********************变量类型********************
--lua中所有的变量 不需要申明变量类型
--lua中的所有变量 默认为全局变量  非全局前面加local
--lua中没有各种数值类型 统一都是Number类型 表示浮点数和
print("*************全局本地变量*************")
local a = 1 --局部 仅限于本文本访问  编程时 尽量都加local 
print(a)
a1 = 1.5 --全局 
print(a1)
--lua中只有false和nil才为假  0和空字符串为真
e = true;
print(e)
--lua中的string 可以用单引号或者双引号括起来
print("*************字符串相关*************")
b = '单引号字符串'
print(b)
c = "双引号字符串"
print(c)
--lua中字符串的换行 省略了\n换行替代符号
c = [[我是
你的
小宝贝
]]
print(c)
--字符串相关
str = "abCdefg"
print(string.upper(str))--小写转大写
print(string.lower(str))--大写转小写
print(string.reverse(str))--翻转字符串
print(string.find(str, "Cde"))--字符串索引查找
print(string.sub(str, 3))--字符串截取
print(string.rep(str, 3))--字符串重复
print(string.gsub(str, "Cd", "**"))--字符串修改
print(#str)--字符串长度
a = true
print(tostring(a));print(string.format("我是%s,我今年%d岁了", "小宝贝", 2))--字符串长度
--lua中空的关键字时nil 相当于C#中的null
print("*************空引用*************")
d = nil
print(d)
print("*************类型获取*************")
--字符串拼接符号..
--type 类型判断
print("类型判断"..type(e))--********************运算符********************
print("*************运算符*************")
--lua中没有自增减运算符
print("加法运算"..1+2)
print("余数运算"..9%2)
print("减法运算"..9-2)
print("乘法运算"..9*2)
print("除法运算"..9/2)
print("幂运算"..9^2)
--********************条件分支语句********************
print("*************条件分支语句*************")
a = 9
if a > 9 thenprint("大于9")
elseif a >= 5 thenprint("大于5")
elseif a == 3 then print("值为3")
elseif a ~= 2 then --不等于print("值为3")
end
--********************逻辑运算符********************
print("*************逻辑运算符*************")
a = true
b = false
if a and b then --逻辑与print("大于9")
elseif a or b5 then --逻辑或print("大于5")
elseif not a then -- 逻辑否print("其它数")
end
--********************循环语句********************
print("*************循环语句*************")
--while 循环
print("*************while循环*************");
num = 0
while num < 5 doprint(num);num = num + 1
end
--do while 循环
print("*************do while循环*************");
a = 1;
repeatprint(a);a = a + 1
until a > 5
--for循环
print("*************for循环*************");
for i = 1,5 do --默认递增+1print(i)
endfor i = 5,1,-1 do --递减1print(i)
end
--********************函数********************
print("*************函数*************")
function f(x) return x^2
end		
print(f(2))function f2(x2) if x2 < 10 thenprint("白卷")elseif x2 < 60 thenprint("分太低")elseif x2 < 70 thenprint("及格")end
end
f2(2)
print("*************变长参数函数*************")
function ff( ... )local arg = {...}local total = 0for i=1,#arg dototal = total + arg[i]endprint(total)
end
ff(1,2,3,4,5,6)print("*************函数嵌套*************")
function f3(x)return function(y) return x + y end
end
a = f3(1)
print(a(2))--********************复杂数据类型********************
print("*************复杂数据类型*************")
--所有的复杂类型都是table(表)
--数组
print("*************数组,列表*************")
--数组的存储类型可以混合,默认索引从1开始
a = {1,2,3,"12312",123123}
print(a[1])
print(a[4])
print(#a)--打印长度 从1开始计数 
print("*************数组遍历*************")
for i=1,#a doprint(a[i])
end
--可以自定义索引 甚至负索引
print("*************自定义索引*************")
a = {[0]=1,2,3,[-1]=4,5}
print(a[0])
print(a[1])
print(a[-1])
print(a[2])
print(a[3])
print(#a)--打印长度 中间产生索引断裂了 会停止计数
print("*************二维数组*************")
a = {{1,2,3},{4,5,6}}
print(a[1][1])
print(a[1][2])
print(a[1][3])
print(a[2][1])
print(a[2][2])
print(a[2][3])
--迭代器遍历
print("*************ipairs迭代遍历键值*************")
a = {[0] = 1,2,[-1] = 3,4,5}
--遍历键值
for i,k in ipairs(a) doprint("ipairs遍历键"..i)print("ipairs遍历值"..k)
end
print("*************pairs迭代遍历键值*************")
for i,k in pairs(a) doprint("pairs遍历键"..i)print("pairs遍历值"..k)
end
print("*************迭代遍历键*************")
--遍历键
for i in pairs(a) doprint("键"..i)
end
print("*************字典*************")
a = {["1"] = 5, ["2"] = 4}
print(a["1"])
print(a["2"])
print("*************类*************")
student = {--年龄age = 1,--性别sex = 0,--unity成绩unity = 90,--成长行为Up = function(self)self.age = self.age + 1print("我成长了"..self.age)end,--上课行为Learn = function( )print("学习")end
}student.Learn()
student.Up(student)
student:Up()
--student.Learn()
student.age = 2
print(student.age)print("*************特殊用法*************")
a,b,c = 1,2,3,4 --4会被忽略
print(a)
print(b)
print(c)
a,b,c = 1,2 --c会变为nil
print(a)
print(b)
print(c)--多个返回值
function Test()return 10,20,30,40
enda,b,c = Test()
print(a)
print(b)
print(c)

1. Lua的数据类型

nil类型

  • 表示一个空值或者无效值。

boolean类型

  • 表示真或假,只有两个取值:true和false。

number类型

  • 表示实数,可以是整数或者浮点数。

string类型

  • 表示字符串,可以包含任意字符。

table类型

  • 表示一种关联数组,可以用来表示各种复杂的数据结构。

function类型

  • 表示一个函数,可以接受参数并返回值。

userdata类型

  • 表示一个用户自定义的数据类型,通常是一个C语言对象或者结构体。

thread类型

  • 表示一个协程,用于支持多线程编程。

Lua的数据类型比较简单,但是非常灵活。其中,table类型是Lua中最为重要和常用的数据类型,可以用来表示各种复杂的数据结构,比如数组、列表、集合、图等等。同时,Lua还支持元表(metatable)的概念,可以通过元表来定义自定义的操作符、方法、属性等,使得Lua的数据类型更加灵活和强大。

无需声明一个变量就可使用,不过在赋值之前,变量的值为nil,表示不存在。
Lua为动态类型语言,变量的类型可以动态改变。

print(a) -- nil
print(type(a)) -- nil
a= 1
print(a) -- 1
print(type(a)) -- number
a= "abc" 
print(a) -- abc
print(type(a)) -- string

注意事项
number
所有数字都是双精度浮点数。

nil
虽然nil的类型是nil,但是type(nil)返回的是字符串"nil"。

string
拼接字符串使用…而不是加号。1+"1"会得到2.0。

table
table是key-value形式的表,可以嵌套。
初始化格式tb = {[key1] = value1, [key2] = value2, …},如tb = {[“a”] = “hello”, [“b”] = {1, 2, 3}}。
使用tb[key]来取对应的value值,表中没有的项会返回nil;使用tb[key] = value的形式来更新表。

数组
Lua中数组的本质是一个table。
使用tb = {“a”, “b”, “c”}的形式初始化一个数组,等同于tb = {[1] = “a”, [2] = “b”, [3] = “c”}。
要注意数组的序号是从1开始的,并且数组中元素的数据类型不需要一致。

变量作用域
变量默认是全局的,一处定义到处使用。
使用local关键字修饰变量,可以将其变为局部变量。

2. Lua的控制结构

条件语句(if语句)
用于根据条件来执行不同的代码块。

循环语句(while语句、repeat-until语句、for语句)
用于重复执行一段代码块。

分支语句(switch语句)
用于根据不同的值来执行不同的代码块。

函数调用语句(function语句)
用于定义和调用函数。

赋值语句(赋值运算符)
用于给变量或表的元素赋值。

局部变量定义语句(local语句)
用于定义局部变量,其作用域仅限于当前块内。

控制语句(break语句、return语句)
用于控制程序的流程。

其中,if语句和while语句是Lua中最常用的控制结构,常用于条件判断和循环操作。for语句可以用于迭代数组和列表等数据结构,repeat-until语句用于至少执行一次的循环。switch语句在Lua中没有原生的实现,但可以用一些技巧来实现类似的功能。函数调用语句和赋值语句是Lua中最基本的操作,也是Lua程序中最常用的语句。局部变量定义语句可以避免变量名冲突,提高程序的可读性和可维护性。控制语句用于控制程序的流程,可以使程序更加灵活和高效。

2.1 循环

2.1.1 for

循环有两种方式:数值循环和迭代循环。

2.1.1.1 数值循环

数值循环格式:

for i = 起始值, 结束值, 间隔值 do-- statements
end

其中,间隔值为1的时候可以省略。

2.1.1.2 迭代循环

遍历表tb:

tb = {["a"] = "hello", ["b"] = 2}
for k,v in pairs(tb) doprint(k, v)
end

其中,pairs为内置函数,提供了table的迭代器。

2.1.2 while

while格式:

while(condition)
do-- statements
end

2.1.3 repeat-until

repeat-until格式:

repeat-- statements
until( condition )

2.2 条件语句

格式:

if(cond1) then-- statements
elseif(cond2) then-- statements
elseif(cond3) then-- statements
...
else-- statements
end

2.3 函数

function类型的变量有两种定义方式,二者等价。调用的时候记得加括号,不然就是一个普通的变量。

function a(num)print("hello "..num)
end
a(5) -- hello 5
print(a) -- 变量地址
print(type(a)) -- function
a = function()print("a")
end
a() -- a
print(a) -- 变量地址
print(type(a)) -- function
a -- 报错

有几点需要注意:

  1. 函数可以嵌套;
  2. 函数默认是全局的,即使是嵌套在其他函数中;如果要定义局部函数,使用local关键字。

例:

function a()print("a")function b()print("b")endc = function()print("c")endlocal function d()print("d")end
enda() -- a
b() -- b
c() -- c
d() -- 报错,局部函数外部不能访问

可变长参数
使用…表示可变长的参数。
使用pairs{…}来获取变长参数的迭代器。
使用select(“#”, …)来获取传入的可变长参数个数。

f = function(...) -- 可变参数函数print("一共有"..select("#", ...).."个参数")for k, v in pairs{...} doprint(k..": "..v)end
end
f("a", "b", "c")

运算符
数学运算:
+、-、*、/:加减乘除
%:求余
^:求幂

关系运算:
==:等于
~=:不等于

、<、>=、<=:大于、小于、大于等于、小于等于

逻辑运算:
and:与
or:或
not:否

其他:
…:字符串连接
#:返回字符串或表的长度

3. Lua中的变量作用域

Lua中的变量作用域分为全局变量和局部变量两种。

全局变量
在函数外部定义的变量都是全局变量,全局变量可以在程序的任何位置被访问和修改。如果在函数内部访问全局变量,需要使用全局变量名(加上"_G."前缀)来访问。

局部变量
在函数内部定义的变量都是局部变量,局部变量的作用域仅限于当前函数内部。局部变量的好处是可以避免变量名冲突,提高程序的可读性和可维护性。在Lua中,可以使用关键字"local"来定义局部变量。

在Lua中,变量的作用域是静态的,也就是说,在程序运行之前就已经确定了变量的作用域。如果在同一作用域内出现了重名的变量,则后面的变量会覆盖前面的变量。在Lua中,变量的作用域是基于块(block)的,块可以嵌套,内部块的变量可以访问外部块的变量,但是外部块的变量不能访问内部块的变量。在Lua中,一个块可以是一个函数体、一个if语句、一个while语句、一个for语句等。

相关文章:

Lua学习笔记

文章目录 前言1. Lua的数据类型2. Lua的控制结构2.1 循环2.1.1 for2.1.1.1 数值循环2.1.1.2 迭代循环2.1.2 while2.1.3 repeat-until 2.2 条件语句2.3 函数 3. Lua中的变量作用域 前言 Lua是一种轻量级的、高效的、可扩展的脚本语言&#xff0c;由巴西里约热内卢天主教大学&am…...

5月8日星期四今日早报简报微语报早读

5月8日星期四&#xff0c;农历四月十一&#xff0c;早报#微语早读。 1、外交部回应中美经贸高层会谈&#xff1a;这次会谈是应美方请求举行的&#xff1b; 2、河南许昌官方&#xff1a;胖东来联合京东物流打造的供应链产业基地将于今年投入运营&#xff1b; 3、我国外汇储备…...

P2415 集合求和 详解

此题我认为主要考数学逻辑&#xff0c;这个题目考的是你面对代码时&#xff0c;是否会从中去找规律推导一个数学公式。 先看题目: 此题目与集合有关&#xff0c;所以对于数学基础不好的同学&#xff0c;我会先给你讲一下这个集合的相关知识。 一&#xff0c;首先&#xff0c;…...

#define ccw (0)和#define ccw 0什么区别

目录 区别 一般建议 简单总结 #define ccw (0) 和 #define ccw 0 这两者在大多数情况下的功能非常相似&#xff0c;但在细节上有一些区别&#xff0c;主要涉及宏展开时的行为。 区别 #define ccw (0)&#xff1a;宏定义的内容是&#xff08;0&#xff09;&#xff0c;带括…...

跨平台移动开发框架React Native和Flutter性能对比

背景与架构 React Native 和 Flutter 都是跨平台移动开发框架&#xff0c;但它们的性能表现因架构差异而异。React Native 在 2025 年采用了 Bridgeless New Architecture&#xff08;版本 0.74&#xff09;&#xff0c;使用 JavaScript Interface (JSI) 替代传统的 JavaScrip…...

【PhysUnits】2 SI 量纲 实现解析(prefix.rs)

源码 这是一个编译时量纲检查的物理单位库。 //! Physical Units Library with Type-Level Dimension Checking //! 带类型级量纲检查的物理单位库 //! //! This module provides type-safe physical unit representations using Rusts type system //! to enforce dimension…...

新能源汽车赛道变局:传统车企子品牌私有化背后的战略逻辑

2025年5月&#xff0c;一则资本市场动态引发行业震动&#xff1a;某国内头部传统车企宣布拟以每股2.57美元的价格私有化旗下高端新能源品牌&#xff0c;若交易完成&#xff0c;该新能源品牌将正式从纽交所退市。这一决策发生在全球新能源汽车行业经历剧烈洗牌、资本市场估值逻辑…...

[matlab]private和+等特殊目录在新版本matlab中不允许添加搜索路径解决方法

当我们目录包含有private,或者时候matlab搜索目录不让添加&#xff0c;比如截图&#xff1a; 在matlab2018以前这些都可以加进去后面版本都不行了。但是有时候我们必须要加进去才能兼容旧版本matlab库&#xff0c;比如mexopencv库就是这种情况。因此我们必须找到一个办法加进去…...

ImportError: cannot import name ‘Optional‘ from ‘pydantic‘

概览 再使用Optional定义fastapi可选参数时&#xff0c;出现了错误&#xff1a; ImportError: cannot import name Optional from pydantic python version: 3.8 pydantic version: 2.9.2 快速解决方案 Optional导入修改为typing包&#xff0c;如下 from typing import List…...

“水木精灵” 王泫梓妍时尚造型引关注

“水木精灵” 王泫梓妍一组时尚照片曝光&#xff0c;再次展现其独特时尚品味与青春活力。 照片中&#xff0c;王泫梓妍身着白色针织开衫搭配深蓝色牛仔短裙&#xff0c;开衫上精致的水钻装饰与深蓝色海军领增添了细节亮点&#xff0c;牛仔短裙的金色纽扣设计别致&#xff0c;整…...

数据结构-堆排序

1.定义 -堆中每个节点的值都必须大于等于&#xff08;或小于等于&#xff09;其左右子节点的值。如果每个节点的值都大于等于其子节点的值&#xff0c;这样的堆称为大根堆&#xff08;大顶堆&#xff09;&#xff1b;如果每个节点的值都小于等于其子节点的值&#xff0c;称为…...

影响服务器性能的主要因素是什么

在这个数字化高速发展的时代&#xff0c;服务器就像是幕后的超级英雄&#xff0c;默默支撑着我们丰富多彩的网络世界。首先&#xff0c;硬件配置堪称服务器性能的基石。就好比一辆跑车&#xff0c;强大的引擎&#xff08;CPU&#xff09;、宽敞的跑道&#xff08;内存&#xff…...

为什么 MySQL 用 B+ 树作为数据的索引,以及在 InnoDB 中数据库如何通过 B+ 树索引来存储数据以及查找数据

http://www.liuzk.com/410.html 索引是一种数据结构&#xff0c;用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量&#xff0c;数据量大了索引才显得有意义&#xff0c;如果我想要在 [1,2,3,4] 中找到 4 这个数据&am…...

若依框架Ruoyi-vue整合图表Echarts中国地图标注动态数据

若依框架Ruoyi-vue整合图表Echarts中国地图 概述创作灵感预期效果整合教程前期准备整合若依框架1、引入china.json2、方法3、data演示数据4、核心代码 完整代码[毫无保留]组件调用 总结 概述 首先&#xff0c;我需要回忆之前给出的回答&#xff0c;确保这次的内容不重复&#…...

可撤销并查集,原理分析,题目练习

零、写在前面 可撤销并查集代码相对简单&#xff0c;但是使用场景往往比较复杂&#xff0c;经常用于处理离线查询&#xff0c;比较经典的应用是结合线段树分治维护动态连通性问题。在一些较为综合的图论问题中也经常出现。 前置知识&#xff1a;并查集&#xff0c;扩展域并查…...

中介者模式(Mediator Pattern)详解

文章目录 1. 中介者模式概述1.1 定义1.2 基本思想2. 中介者模式的结构3. 中介者模式的UML类图4. 中介者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 飞机空中交通控制示例5.3 GUI应用中的中介者模式6. 中介者模式的优缺点6.1 优点6.2 缺点7. 中介者模式的适用场景8. 中介…...

Java网络编程:深入剖析UDP数据报的奥秘与实践

在浩瀚的计算机网络世界中,数据传输协议扮演着至关重要的角色。其中,用户数据报协议(UDP,User Datagram Protocol)以其独特的“轻量级”和“无连接”特性,在众多应用场景中占据了一席之地。与更为人熟知的传输控制协议(TCP,Transmission Control Protocol)相比,UDP提…...

17.thinkphp的分页功能

一&#xff0e;分页功能 1.不管是数据库操作还是模型操作&#xff0c;都使用paginate()方法来实现(第一种方式)&#xff1b; //查找user表所有数据&#xff0c;每页显示5条 returnView::fetch(index, [list > User::paginate(5)]); 页数&#xff1a; 2.创建一个静态模版页面…...

Pandas比MySQL快?

知乎上有人问&#xff0c;处理百万级数据&#xff0c;Python列表、Pandas、Mysql哪个更快&#xff1f; Pands是Python中非常流行的数据处理库&#xff0c;拥有大量用户&#xff0c;所以拿它和Mysql对比也是情理之中。 实测来看&#xff0c;MySQL > Pandas > Python列表…...

问题 | 低空经济未来发展前景机遇及挑战

低空经济 **一、发展前景与机遇**1. **政策红利加速释放&#xff0c;顶层设计逐步完善**2. **技术突破驱动商业化落地**3. **应用场景多元化拓展**4. **万亿级市场潜力** **二、主要挑战**1. **空域管理与安全监管难题**2. **技术瓶颈与产业链短板**3. **法规与标准体系待完善*…...

Matlab 分数阶PID控制

1、内容简介 Matlab218-分数阶PID控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

如何对 Oracle 日志文件进行校验

目录 一、基本概述 二、基础知识 1、工具介绍 (1)BBED (2)dump 2、数据解析 (1)BLOCK 0 (2)BLOCK 1 (3)Block n( >=2 ) (4)redo record header (5)redo change 1)redo change header 2)redo change length list (6)Example 三、参考代码…...

从零开始用 AI 编写一个复杂项目的实践方法论

从零开始用 AI 编写一个复杂项目的实践方法论 这篇文章我用ai润色了一下&#xff0c;但是初稿是完全由我个人整理的逻辑思路&#xff0c;不是完全由ai生成的。其中内容也确实是我在实践中遇到问题、解决问题、总结出来的经验。 在从零开发一个复杂项目时&#xff0c;直接把目标…...

k8s监控方案实践(一):部署Prometheus与Node Exporter

k8s监控方案实践&#xff08;一&#xff09;&#xff1a;部署Prometheus与Node Exporter 文章目录 k8s监控方案实践&#xff08;一&#xff09;&#xff1a;部署Prometheus与Node Exporter一、Prometheus简介二、PrometheusNode Exporter实战部署1. 创建Namespace&#xff08;p…...

2.5 特征值与特征向量

本章围绕特征值、特征向量及其应用展开&#xff0c;是线性代数的核心章节之一。以下从四个核心考点系统梳理知识体系&#xff1a; 考点一&#xff1a;矩阵的特征值与特征向量 1. 计算方法 具体矩阵&#xff1a; 解特征方程 ∣ λ E − A ∣ 0 |\lambda E - A| 0 ∣λE−A∣…...

从简历筛选到面试管理:开发一站式智能招聘系统源码详解

当下&#xff0c;如何打造一款高效、精准的一站式智能招聘系统&#xff0c;成为了很多人力资源科技公司和创业团队关注的焦点。在这篇文章中&#xff0c;将带你深入了解如何从零开始开发一款智能招聘系统源码&#xff0c;涵盖从简历筛选到面试管理的全流程。 一、招聘系统的核心…...

10.进程控制(下)

一、进程程序替换&#xff08;重点&#xff09; 在程序替换过程中&#xff0c;并没有创建新的进程&#xff0c;只是把当前进程的代码和数据用新程序的代码和数据进行覆盖式的替换。 1&#xff09;一旦程序替换成功&#xff0c;就去执行新代码了&#xff0c;后序代码不执行 2&am…...

【Python 字符串】

Python 中的字符串&#xff08;str&#xff09;是用于处理文本数据的基础类型&#xff0c;具有不可变性、丰富的内置方法和灵活的操作方式。以下是 Python 字符串的核心知识点&#xff1a; 一、基础特性 定义方式&#xff1a; s1 单引号字符串 s2 "双引号字符串" s…...

最新CDGP单选题(第四章)补充

31、 [单选] 企业数据模型主题域的识别准则必须在整个企业模型中保持一致,以下哪项是常用的主题域识别准则: A:使用规范化规则,从系统组合中分离主题域...

Cursor降智找不到文件(Cursor降智)

文章目录 明明提供了上下文&#xff0c;却找不到文件&#xff01; 明明提供了上下文&#xff0c;却找不到文件&#xff01; 解决办法&#xff0c;删除codebase index&#xff0c;最好再把那个Index new folders by default给设置为Disabled。 这样设置貌似就不会出现找不到文件…...

Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能)

说明&#xff1a;这是一个系统实战项目&#xff08;附带代码文档安装讲解&#xff09;&#xff0c;如需代码文档安装讲解可以直接到文章最后关注获取。 系统演示如下&#xff1a; Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能) 项目背景 随着互联网的…...

cat、more和less的区别

在 Linux 系统中&#xff0c;cat、more 和 less 都是用于查看文件内容的命令&#xff0c;但它们在功能和使用场景上有显著区别。以下是它们的详细对比&#xff1a; 1. cat 命令 功能&#xff1a; - 直接输出整个文件&#xff1a;一次性将文件内容全部显示在终端上&#xff…...

Python cv2特征检测与描述:从理论到实战

在计算机视觉领域&#xff0c;特征检测与描述是图像匹配、物体识别、SLAM等任务的核心技术。本文将结合OpenCV的cv2库&#xff0c;系统讲解特征检测与描述的原理&#xff0c;并通过Python代码演示主流算法的实现。 一、为什么需要特征检测与描述&#xff1f; 图像本质是像素矩…...

实践005-Gitlab CICD全项目整合

文章目录 环境准备环境准备集成Kubernetes Gitlab CICD项目整合项目整合整合设计 后端Java项目部署后端Java项目静态检查后端Java项目镜像构建创建Java项目部署文件创建完整流水线 前端webui项目部署前端webui项目镜像构建创建webui项目部署文件创建完整流水线 构建父子类型流水…...

为了摸鱼和吃瓜,我开发了一个网站

平时上班真的比较累&#xff0c;摸鱼和吃瓜还要跳转多个平台的话&#xff0c;就累上加累了。 所以做了一个聚合了全网主流平台热搜的网站。 目前市面上确实有很多这种网站了&#xff0c;所以目前最主要有两点和他们不同&#xff1a; 给热搜列表增加了配图&#xff0c;刷的时候…...

React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明

使用 React 搭建一个现代化的聊天界面&#xff0c;支持与 Ollama 本地部署的大语言模型进行多轮对话。界面清爽、功能完整&#xff0c;支持 Markdown 渲染、代码高亮、<think> 隐藏思考标签、流式渐进反馈、暗黑模式适配等特性。 &#x1f9e9; 核心功能亮点 ✅ 模型选择…...

算法中的数学:约数

1.求一个整数的所有约数 对于一个整数x&#xff0c;他的其中一个约数若为i&#xff0c;那么x/i也是x的一个约数。而其中一个约数的大小一定小于等于根号x&#xff08;完全平方数则两个约数都为根号x&#xff09;&#xff0c;所以我们只需要遍历到根号x&#xff0c;然后计算出另…...

性能远超SAM系模型,苏黎世大学等开发通用3D血管分割基础模型

如果把人的身体比作一座庞大的城市&#xff0c;那么血管无疑就是这座城市的「道路」&#xff0c;动脉、静脉以及毛细血管对应着高速公路、城市道路以及乡间小道&#xff0c;它们相互协作&#xff0c;通过血液将营养物质、氧气等输送到身体各处&#xff0c;从而维持着这座「城市…...

对 Kotlin 中的 data 关键字的理解,相比于普通类有哪些特点?

Kotlin 中的 data 关键字用于声明数据类&#xff08;Data Class&#xff09;&#xff0c;它专门为简化数据模型的实现而设计的。 1 主构造函数必须至少有一个参数&#xff0c;且参数标记为 val 或 var 数据类的主构造函数必须至少有一个参数&#xff0c;并且这些参数必须使用…...

电厂参与全球能源效率排名的方法

在全球积极推动可持续能源发展的大背景下&#xff0c;电厂参与全球能源效率排名&#xff0c;对提升自身竞争力、推动行业进步意义重大。这不仅有助于电厂明确自身在全球能源领域的地位&#xff0c;还能促进其通过能效对标&#xff0c;学习先进经验&#xff0c;实现节能减排与高…...

〖 Linux 〗解决 VS Code 远程连接服务器的常见问题

文章目录 解决 VS Code 远程连接服务器的断开问题VS Code Remote-SSH一直弹出输入密码的问题VsCode C 语法检测失效不标红色波浪线 解决办法卸载扩展方式&#xff1a; 解决vscode C智能提示缓慢 解决 VS Code 远程连接服务器的断开问题 解决 vscode 卡顿&#xff0c;卡死&…...

谷歌 Gemma 大模型安装步骤

1.下载OllamaSetup安装包 下载地址&#xff1a;https://ollama.com/download 这里已Windows系统为例&#xff1a; 2.安装OllamaSetup客户端 3.部署大模型 在系统搜索栏里面&#xff0c;搜索cmd并打开 根据电脑实际配置情况选择对应的模型进行安装 【1】. 普通7B版 安装指…...

【Linux修炼手册】Linux开发工具的使用(一):yum与vim

文章目录 一、Linux 软件包管理器——yum安装与卸载的使用方法查看软件包 二、Linux编辑器——vimvim命名模式常用指令底行模式常用指令 一、Linux 软件包管理器——yum Linux安装软件的方式有3种&#xff1a; 源代码安装——成本极高rmp安装——具有安装依赖、安装源、安装版…...

JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码

一、源码描述 这是一套房屋租售管理源码&#xff0c;基于SpringBootVue框架&#xff0c;后端采用JAVA开发&#xff0c;源码功能完善&#xff0c;涵盖了房屋租赁、房屋销售、房屋交易等业务。 二、源码截图...

XL32F001国产低成本单片机,24MHz主频,24KB Flash,3KB SRAM

XL32F001 是一颗基于ARM Cortex-M0内核的32 位微控制器&#xff0c;专为低成本、低功耗、小型化嵌入式系统设计&#xff0c;适合对资源需求中等但强调性价比和能效的场景。主频可达24M&#xff0c;内存方面有24KB Flash和3KB SRAM&#xff0c;适用于资源需求不大的应用场景。1.…...

k8s术语之job

Job类型 Kubernetes支持以下几种Job: 非并行Job&#xff1a;通常创建一个Pod直至其成功结束 固定结束次数的Job:设置.spec.completions&#xff0c;创建多个 Pod&#xff0c;直到 .spec.completions 个 Pod 成功结束 带有工作队列的并行Job&#xff1a;设置.spec.Parallelism 但…...

单片机-STM32部分:8、外部中断

飞书文档https://x509p6c8to.feishu.cn/wiki/ENFswNTSGiblehkIMtfc9dYinqh 创建工程 按工程创建章节步骤&#xff0c;把工程创建好&#xff0c;并配置外部时钟源&#xff0c;SWD调试模式&#xff0c;时钟72MHz。 设置引脚模式 找到需要配置的按键&#xff0c;例如PC2&#…...

电子电器架构 --- 电气/电子架构如何发展以满足其处理和传感器融合需求

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

WordPress插件:WPJAM Basic优化设置

WPJAM Basic 插件的「优化设置」是我爱水煮鱼博客多年使用 WordPress 的经验而整理的各类优化设置。 一、功能屏蔽 功能屏蔽就是屏蔽一些WordPress中用不上、难用的功能&#xff0c;目前的支持屏蔽以下功能&#xff1a; &#xff08;1&#xff09;屏蔽文章修订功能 文章修…...

数字电子技术基础(五十六)——JK触发器

目录 1 JK触发器 2 使用Digital软件来绘制JK触发器 1 JK触发器 对于D触发器来说&#xff0c;其功能是过于简单了&#xff0c;D触发器只有置0和置1的操作&#xff0c;而JK触发器相对于D触发器处理原来的保持、置位和复位的操作&#xff0c;还增加了翻转操作。JK触发器通过优化…...