完整教程:【Go/Python/Java】基础语法+核心特性对比

news/2026/1/18 19:37:59/文章来源:https://www.cnblogs.com/yangykaifa/p/19498993

文章目录

  • 目录
    • 引言
    • 一、核心技术维度对比表
    • 二、分语言核心语法深度解析
      • 2.1 Go语言:简洁高效的“并发王者”
        • 2.1.1 变量声明与类型系统(零值初始化+指针)
        • 2.1.2 流程控制(仅for循环+switch无穿透)
        • 2.1.3 错误处理(error显式返回)
        • 2.1.4 数据结构(数组+切片+map)
        • 2.1.5 函数特性(多返回值+可变参数)
        • 2.1.6 结构体与接口(面向对象替代方案)
        • 2.1.7 并发编程(Goroutine+Channel)
        • 2.1.8 包管理与运行环境
      • 2.2 Python语言:动态灵活的“开发利器”
        • 2.2.1 变量声明与类型系统(动态类型)
        • 2.2.2 流程控制(缩进敏感+丰富语法糖)
        • 2.2.3 异常处理(try-except)
        • 2.2.4 数据结构(列表+字典+集合)
        • 2.2.5 函数特性(默认参数+可变参数+装饰器)
        • 2.2.6 类与面向对象(单继承+多态)
        • 2.2.7 并发编程(线程+进程+协程)
        • 2.2.8 包管理与运行环境
      • 2.3 Java语言:稳健跨平台的“企业级标杆”
        • 2.3.1 变量声明与类型系统(静态强类型+自动装箱)
        • 2.3.2 流程控制(完整循环+switch穿透)
        • 2.3.3 异常处理(try-catch+Checked Exception)
        • 2.3.4 数据结构(数组+集合框架)
        • 2.3.5 函数特性(重载+重写+可变参数)
        • 2.3.6 类与面向对象(类+接口+泛型)
        • 2.3.7 并发编程(线程池+CompletableFuture)
        • 2.3.8 包管理与运行环境
    • 三、核心技术特点深度剖析
      • 3.1 Go语言:简洁与性能的平衡
      • 3.2 Python语言:动态与效率的极致
      • 3.3 Java语言:稳健与跨平台的标杆
    • 四、场景化选型建议
    • 五、总结

目录

引言

若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com

在编程领域,Go、Python、Java 是覆盖 入门学习、企业开发、云原生、AI 数据分析 等全场景的三大主流语言。它们的基础语法设计深刻反映了各自的核心定位:

在这里插入图片描述

一、核心技术维度对比表

对比维度Go 语言Python 语言Java 语言
语言本质静态强类型、编译型(原生二进制)动态强类型、解释型(PyPy 支持 JIT 编译)静态强类型、编译型(字节码+JVM 解释/即时编译)
变量声明方式1. var 变量名 类型 = 值(显式类型)
2. var 变量名 = 值(类型推断)
3. 变量名 := 值(简短声明,仅函数内)
4. 多变量:var a,b int=1,2/a,b:=1,"abc"
1. 变量名 = 值(动态声明,无需类型)
2. 多变量:a,b=1,2/a,b,c=1,"x",True
3. 链式赋值:a=b=c=10
4. 无显式声明,赋值即定义
1. 类型 变量名 = 值(显式声明)
2. 类型 变量名; 变量名=值(先声明后赋值)
3. 多变量:int a=1,b=2;(同类型)
4. 成员变量默认初始化,局部变量必须手动初始化
类型系统特性1. 类型固定,不可动态修改
2. 零值初始化(int=0、string=“”、bool=false)
3. 支持指针(*T),可直接操作内存地址
4. 无包装类,基本类型与引用类型统一处理
1. 变量类型动态可变(a=1a="abc" 合法)
2. 无零值,未赋值变量不可用
3. 无显式指针(底层存在,用户无需操作)
4. 基本类型与容器类型无缝混用
1. 类型固定,不可动态修改
2. 基本类型有默认值(int=0、boolean=false),引用类型默认null
3. 支持指针(Type*),但禁止指针算术运算
4. 基本类型+包装类(自动装箱/拆箱)
流程控制语法1. if:条件无括号,大括号必填且换行
2. 循环:仅for(普通/while式/无限)
3. switch:无需break(默认不穿透),支持任意类型case
4. 无do-while,无三元运算符(用if-else替代)
1. if:无括号,缩进敏感(4空格),无大括号
2. 循环:for(遍历/普通)、while(条件)
3. match-case(3.10+,类似switch)
4. 无do-while(用while True+break模拟)
5. 三元运算符:a if 条件 else b
1. if:条件需括号,大括号必填(可同行)
2. 循环:for(普通/增强)、whiledo-while(至少执行1次)
3. switch:需break(否则穿透),Java14+支持表达式式
4. 三元运算符:条件? 表达式1:表达式2
5. 支持标签跳转(多层循环控制)
异常/错误处理1. 无异常机制,通过error接口显式返回错误
2. 自定义错误:fmt.Errorf()/errors.New()
3. 错误处理:if err != nil 强制检查
4. 无try-catch,用返回值传递错误
1. 异常机制:try-except-finally/try-except-else捕获
2. 自定义异常:继承Exception
3. 抛出异常:raise 异常对象
4. 支持异常链(raise 新异常 from 原异常
1. 异常机制:try-catch-finally捕获
2. 异常分类:Checked Exception(编译时检查)、RuntimeException(运行时)
3. 自定义异常:继承Exception/RuntimeException
4. 抛出异常:throw 异常对象,方法需声明throws
核心数据结构基本类型:int/int64、float32/float64、bool、string、byte
复合类型:数组(固定长度)、切片([]T,动态)、映射(map[K]V)、结构体(struct)、接口(interface)
基本类型:int、float、bool、str
复合类型:列表(list,可变)、元组(tuple,不可变)、字典(dict,键值对)、集合(set,去重)
内置支持JSON序列化/反序列化
基本类型:byte、short、int、long、float、double、boolean、char
复合类型:数组(固定长度)、集合(ArrayList/HashSet/HashMap)、类/对象、接口、泛型
需借助Jackson/Gson实现JSON处理
函数特性1. 定义:func 名(参数名 类型) 返回类型 { }
2. 支持多返回值(常用“结果+error”)
3. 支持可变参数:func foo(args ...T)
4. 无函数重载、无默认参数
5. 支持函数作为参数/返回值(一等公民)
1. 定义:def 名(参数=默认值, *args, **kwargs):
2. 单返回值(多返回值用元组包装,自动解包)
3. 支持可变参数:*args(位置)、**kwargs(关键字)
4. 支持默认参数、关键字参数
5. 无函数重载(同名函数覆盖)
6. 支持函数嵌套、闭包、装饰器
1. 定义:返回类型 名(类型 参数名) { }
2. 单返回值(多返回值需用数组/对象包装)
3. 支持可变参数:void foo(int... args)
4. 支持函数重载(参数个数/类型/顺序不同)
5. 支持方法重写(@Override
6. 静态方法(static)、实例方法、构造方法
面向对象(结构体/类)1. 无类,用struct(结构体)模拟类
2. 无继承,用“结构体嵌套”实现组合
3. 多态:通过接口(interface)隐式实现(无需implements
4. 方法:绑定到结构体的函数(值接收者/指针接收者)
1. 类定义:class 类名:,支持单继承(class A(B):
2. 多态:子类重写父类方法
3. 封装:通过属性名前缀_(私有)/__(名称修饰)实现
4. 构造方法:__init__(),支持类方法(@classmethod)、静态方法(@staticmethod
1. 类定义:class 类名 [extends 父类] [implements 接口]:
2. 单继承、多接口实现
3. 多态:子类重写父类方法,父类引用指向子类实例
4. 封装:通过访问修饰符(private/public/protected)实现
5. 构造方法:类名(),支持构造器重载
并发编程模型1. 核心:Goroutine(轻量级线程,内存<2KB)+ Channel(通信管道)
2. 调度模型:M:N(用户态Goroutine映射到内核线程)
3. 同步机制:Channel、sync包(Mutex、WaitGroup)
4. 支持百万级并发,无竞态问题(通信代替共享内存)
1. 线程:threading模块(GIL限制,多核无效)
2. 进程:multiprocessing模块(突破GIL,多核有效)
3. 协程:asyncio模块(单线程异步,IO密集型高效)
4. 同步机制:threading.Lockmultiprocessing.Queue
1. 线程:Thread类(1:1调度,内核线程)
2. 线程池:Executors(FixedThreadPool/CachedThreadPool)
3. 异步编程:CompletableFuture(非阻塞)
4. 同步机制:synchronized关键字、Lock接口(ReentrantLock)
5. 支持线程间通信(wait()/notify()
包管理与导入1. 包声明:package 包名(文件第一行)
2. 导入:import "包路径"/import 别名 "包路径"/import . "包路径"(直接调用)
3. 依赖管理:go mod(Go1.11+),自动下载依赖
4. 禁止循环导入,包名与目录名可不同
1. 无强制包声明(默认__main__
2. 导入:import 模块/import 模块 as 别名/from 模块 import 成员
3. 依赖管理:pip(第三方包)、venv(虚拟环境)、pyproject.toml(项目依赖)
4. 支持相对导入(from . import 模块
1. 包声明:package 包名(文件第一行)
2. 导入:import 包路径/import 别名 包路径/import static 包路径.类.成员(静态导入)
3. 依赖管理:Maven(pom.xml)/Gradle(build.gradle)
4. 禁止循环导入,包名与目录名建议一致
运行环境与部署1. 运行依赖:无(编译为单文件二进制,包含所有依赖)
2. 编译命令:go build(跨平台编译:GOOS=linux GOARCH=amd64 go build
3. 部署方式:直接上传二进制文件运行
4. 运行命令:./程序名(Linux)/程序名.exe(Windows)
1. 运行依赖:Python解释器(CPython/PyPy)
2. 无编译步骤(直接运行源码),可通过pyinstaller打包为exe
3. 部署方式:安装解释器+依赖包(pip install -r requirements.txt
4. 运行命令:python 脚本名.py
1. 运行依赖:JVM(Java虚拟机)
2. 编译步骤:javac 源文件.java(生成.class字节码)
3. 部署方式:安装JDK/JRE,打包为JAR/WAR包运行
4. 运行命令:java -jar 包名.jar
执行速度与性能1. 编译为原生机器码,执行速度接近C/C++
2. 并发性能极强(百万级Goroutine无压力)
3. 内存占用低(Goroutine仅占2KB栈空间)
1. 纯Python执行较慢(解释型),PyPy可加速5-10倍
2. 单线程性能一般,多核需用多进程
3. 内存占用中等,容器类型(list/dict)开销较大
1. JIT编译后执行速度较快(接近原生)
2. 单线程性能优于Python,并发性能依赖线程池优化
3. 内存占用较高(JVM初始化开销+对象头占用)
生态与典型应用生态:云原生、微服务、网络编程、中间件
典型应用:Kubernetes、Docker、Etcd、Gin框架
生态:数据分析、AI/ML、Web开发、自动化脚本
典型应用:TensorFlow、Django/Flask、Pandas、Selenium
生态:企业级应用、安卓开发、大数据、金融系统
典型应用:Spring Boot/Cloud、Hadoop、安卓App、支付宝/京东后端

二、分语言核心语法深度解析

2.1 Go语言:简洁高效的“并发王者”

Go 语法设计的核心是“少即是多”,剔除冗余特性,通过极简语法实现高效开发与高性能运行,尤其擅长并发编程。

2.1.1 变量声明与类型系统(零值初始化+指针)
package main
import "fmt"
func main() {
// 1. 显式声明(指定类型,零值初始化)
var age int           // 零值:0
var name string       // 零值:""
var isStudent bool    // 零值:false
fmt.Printf("显式声明:age=%d, name=%q, isStudent=%t\n", age, name, isStudent)
// 2. 类型推断(省略类型,编译器自动推导)
var city = "Beijing"
fmt.Printf("类型推断:city=%s(类型%T)\n", city, city) // string
// 3. 简短声明(:=):仅函数内可用,必须初始化
score, gender := 95.5, "男"
fmt.Printf("简短声明:score=%.1f(%T), gender=%s(%T)\n", score, score, gender, gender)
// 4. 指针类型(*T):操作内存地址
var num int = 100
ptr := &num                    // &取地址,ptr类型为*int
fmt.Printf("num地址:%p,指针指向值:%d\n", ptr, *ptr) // *解引用
*ptr = 200                     // 通过指针修改原变量
fmt.Printf("修改后num:%d\n", num) // 200
}
2.1.2 流程控制(仅for循环+switch无穿透)
package main
import "fmt"
func main() {
// 1. if-else(条件无括号,大括号必填)
score := 82
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好") // 输出:良好
} else {
fmt.Println("合格")
}
// if条件中声明变量(作用域仅限if块)
if num := 17; num%2 == 0 {
fmt.Println(num, "是偶数")
} else {
fmt.Println(num, "是奇数") // 输出:17 是奇数
}
// 2. for循环(三种用法)
// 普通for(类似Java)
fmt.Println("普通for:")
for i := 0; i < 3; i++ {
fmt.Printf("i=%d ", i) // 0 1 2
}
fmt.Println()
// while式for(省略初始化和更新)
fmt.Println("while式for:")
j := 0
for j < 3 {
fmt.Printf("j=%d ", j) // 0 1 2
j++
}
fmt.Println()
// 无限for(需break终止)
fmt.Println("无限for:")
k := 0
for {
if k >= 3 {
break
}
fmt.Printf("k=%d ", k) // 0 1 2
k++
}
fmt.Println()
// 3. switch(无break,默认不穿透)
fruit := "orange"
switch fruit {
case "apple":
fmt.Println("苹果")
case "orange", "grape": // 多个case合并
fmt.Println("橙子/葡萄") // 输出:橙子/葡萄
default:
fmt.Println("未知水果")
}
}
2.1.3 错误处理(error显式返回)
package main
import (
"errors"
"fmt"
)
// 1. 普通函数:返回结果+error
func divide(a, b int) (int, error) {
if b == 0 {
// 自定义错误:errors.New() 或 fmt.Errorf()(支持格式化)
return 0, errors.New("除数不能为0")
}
if a < 0 || b < 0 {
return 0, fmt.Errorf("参数[%d,%d]不能为负数", a, b)
}
return a / b, nil // 无错误返回nil
}
func main() {
// 调用函数,强制检查错误
res1, err := divide(15, 3)
if err != nil {
fmt.Println("错误1:", err)
} else {
fmt.Println("15/3=", res1) // 5
}
// 错误场景1:除数为0
res2, err := divide(10, 0)
if err != nil {
fmt.Println("错误2:", err) // 错误2:除数不能为0
}
// 错误场景2:参数为负
res3, err := divide(-8, 2)
if err != nil {
fmt.Println("错误3:", err) // 错误3:参数[-8,2]不能为负数
}
}
2.1.4 数据结构(数组+切片+map)
package main
import "fmt"
func main() {
// 1. 数组(固定长度,类型包含长度)
var arr [5]int          // 长度5的int数组,零值:[0 0 0 0 0]
arr2 := [3]string{"a", "b", "c"}
arr[0] = 10
fmt.Printf("数组arr:%v(类型%T,长度%d)\n", arr, arr, len(arr))
// 2. 切片(动态数组,[]T,长度可变)
// 基于数组创建(左闭右开)
slice1 := arr2[1:3] // 从arr2[1]到arr2[2]
fmt.Printf("切片slice1:%v(长度%d,容量%d)\n", slice1, len(slice1), cap(slice1))
// 直接创建(make):长度3,容量5
slice2 := make([]int, 3, 5)
slice2[0] = 1
slice2 = append(slice2, 2, 3) // 追加元素,容量不足时自动扩容
fmt.Printf("切片slice2:%v(长度%d,容量%d)\n", slice2, len(slice2), cap(slice2))
// 3. map(键值对集合,无序)
m := map[string]int{
"语文": 90,
"数学": 95,
}
m["英语"] = 88 // 添加键值对
fmt.Printf("map:%v(长度%d)\n", m, len(m))
// 遍历map(range)
fmt.Println("map遍历:")
for subject, score := range m {
fmt.Printf("%s:%d分\n", subject, score)
}
// 访问不存在的键(返回零值,无错误)
score, ok := m["物理"]
if ok {
fmt.Println("物理:", score)
} else {
fmt.Println("物理:无成绩") // 输出
}
}
2.1.5 函数特性(多返回值+可变参数)
package main
import "fmt"
// 1. 多返回值函数(结果+错误)
func calculate(a, b int) (sum, diff int, err error) {
if a < 0 || b < 0 {
err = fmt.Errorf("参数不能为负")
return // 裸返回:自动返回已声明的返回值变量
}
sum = a + b
diff = a - b
return
}
// 2. 可变参数函数(...T:任意个T类型参数,本质是切片)
func sum(nums ...int) int {
total := 0
for _, num := range nums {
total += num
}
return total
}
// 3. 函数作为参数(一等公民)
func apply(fn func(int, int) int, a, b int) int {
return fn(a, b)
}
func add(a, b int) int {
return a + b
}
func main() {
// 多返回值调用
sumVal, diffVal, err := calculate(10, 5)
if err != nil {
fmt.Println("错误:", err)
} else {
fmt.Printf("10+5=%d,10-5=%d\n", sumVal, diffVal) // 15,5
}
// 可变参数调用
fmt.Println("1+2+3=", sum(1, 2, 3)) // 6
slice := []int{4, 5, 6}
fmt.Println("4+5+6=", sum(slice...)) // 15(切片转可变参数)
// 函数作为参数
res := apply(add, 8, 2)
fmt.Println("8+2=", res) // 10
}
2.1.6 结构体与接口(面向对象替代方案)
package main
import "fmt"
// 1. 结构体(struct):类似类
type Person struct {
Name string
Age  int
}
// 2. 结构体方法(值接收者:不修改原对象)
func (p Person) Introduce() string {
return fmt.Sprintf("我叫%s,今年%d岁", p.Name, p.Age)
}
// 指针接收者(修改原对象)
func (p *Person) Grow() {
p.Age++
}
// 3. 接口(interface):定义方法签名,无实现
type Greetable interface {
Greet() string
}
// 结构体实现接口(无需显式声明implements)
func (p Person) Greet() string {
return fmt.Sprintf("Hello, I'm %s", p.Name)
}
func main() {
// 结构体实例化
p := Person{Name: "张三", Age: 25}
fmt.Println(p.Introduce()) // 我叫张三,今年25岁
// 指针接收者修改属性
p.Grow()
fmt.Println(p.Introduce()) // 我叫张三,今年26岁
// 多态:接口引用指向结构体实例
var greetable Greetable = p
fmt.Println(greetable.Greet()) // Hello, I'm 张三
}
2.1.7 并发编程(Goroutine+Channel)
package main
import (
"fmt"
"time"
)
// 任务函数:向Channel发送结果
func worker(id int, ch chan<- string) {
time.Sleep(1 * time.Second) // 模拟耗时任务
ch <- fmt.Sprintf("Goroutine %d 完成", id)
}
func main() {
start := time.Now()
// 1. 创建带缓冲Channel(容量3)
ch := make(chan string, 3)
// 2. 启动3个Goroutine(轻量级线程,百万级无压力)
for i := 1; i <= 3; i++ {
go worker(i, ch)
}
// 3. 关闭Channel(所有Goroutine发送完毕后)
go func() {
time.Sleep(1500 * time.Millisecond)
close(ch)
}()
// 4. 接收Channel数据(循环遍历)
for res := range ch {
fmt.Println(res)
}
// 总耗时约1秒(并发执行)
fmt.Printf("总耗时:%v\n", time.Since(start))
}
2.1.8 包管理与运行环境
// 1. 包声明(必须放在文件第一行)
package main
// 2. 导入包(标准库/第三方库)
import (
"fmt"
"time" // 标准库包
// "github.com/gin-gonic/gin" // 第三方库(需go get安装)
)
func main() {
fmt.Println("当前时间:", time.Now())
}
// 3. 依赖管理(go mod)
// 初始化模块:go mod init 模块名
// 下载依赖:go mod tidy(自动下载import的包)
// 编译:go build -o myapp(生成myapp二进制文件)
// 运行:./myapp(Linux)或 myapp.exe(Windows)
// 跨平台编译:GOOS=linux GOARCH=amd64 go build -o myapp-linux

2.2 Python语言:动态灵活的“开发利器”

Python 语法的核心是“动态无约束、缩进敏感、语法糖丰富”,无需关注类型和底层细节,专注业务逻辑快速实现。

2.2.1 变量声明与类型系统(动态类型)
if __name__ == "__main__":
# 1. 动态声明(直接赋值,无需类型)
age = 22  # int类型
name = "李四"  # str类型
score = 92.5  # float类型
is_student = True  # bool类型
print(f"基础类型:age={age}{type(age)}), name={name}{type(name)})")
# 2. 动态修改类型(核心特性)
age = "22岁"  # 从int改为str
print(f"修改后age:{age}{type(age)})")
# 3. 多变量/链式赋值
a, b, c = 10, 20, 30
x = y = z = 100
print(f"多变量:a={a},b={b},c={c};链式赋值:x={x},y={y},z={z}")
# 4. 复合数据类型
fruits = ["apple", "banana"]  # 列表(可变)
person = {"name": "王五", "age": 25}  # 字典(键值对)
nums = {1, 2, 3}  # 集合(去重)
point = (10, 20)  # 元组(不可变)
print(f"列表:{fruits},字典:{person},集合:{nums},元组:{point}")
2.2.2 流程控制(缩进敏感+丰富语法糖)
if __name__ == "__main__":
# 1. if-else(缩进敏感,4空格)
score = 75
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("合格")  # 输出:合格
else:
print("不合格")
# 2. for循环(遍历可迭代对象)
print("遍历列表:")
for fruit in ["apple", "banana", "orange"]:
print(f"- {fruit}")
# 遍历带索引(enumerate)
print("遍历带索引:")
for idx, fruit in enumerate(["apple", "banana"]):
print(f"索引{idx}{fruit}")
# 普通循环(range)
print("range循环(0-4):")
for i in range(5):
print(f"i={i}")
# 3. while循环
print("while循环:")
j = 0
while j < 3:
print(f"j={j}")  # 0 1 2
j += 1
# while-else(循环正常结束执行else)
k = 0
while k < 3:
print(f"k={k}")
k += 1
else:
print("k>=3,循环正常结束")
# 4. match-case(3.10+)
color = "blue"
match color:
case "red":
print("红色")
case "blue":
print("蓝色")  # 输出
case _:
print("未知颜色")
# 5. 三元运算符
max_val = 10 if 10 > 5 else 5
print(f"最大值:{max_val}")  # 10
2.2.3 异常处理(try-except)
# 1. 自定义异常(继承Exception)
class NegativeNumberError(Exception):
"""自定义异常:处理负数参数"""
def __init__(self, msg):
super().__init__(msg)
def divide(a, b):
if b == 0:
# 抛出内置异常
raise ZeroDivisionError("除数不能为0")
if a < 0 or b < 0:
# 抛出自定义异常
raise NegativeNumberError(f"参数[{a},{b}]不能为负数")
return a / b
if __name__ == "__main__":
try:
res = divide(15, 3)
print(f"15/3={res}")  # 5.0
except ZeroDivisionError as e:
print(f"错误1:{e}")
except NegativeNumberError as e:
print(f"错误1:{e}")
# 捕获多个异常
try:
divide(-10, 2)
except (ZeroDivisionError, NegativeNumberError) as e:
print(f"错误2:{e}")  # 错误2:参数[-10,2]不能为负数
# try-except-else-finally
try:
divide(8, 2)
except Exception as e:
print(f"错误3:{e}")
else:
print("无错误,执行else")  # 输出
finally:
print("无论是否出错,都会执行finally")  # 输出
2.2.4 数据结构(列表+字典+集合)
if __name__ == "__main__":
# 1. 列表(list,可变)
fruits = ["apple", "banana", "orange"]
fruits.append("grape")  # 添加元素
fruits[1] = "pear"      # 修改元素
fruits.remove("orange") # 删除元素
print(f"列表:{fruits},长度:{len(fruits)}")
# 列表推导式(语法糖)
nums = [i*2 for i in range(5)]  # [0,2,4,6,8]
print(f"列表推导式:{nums}")
# 2. 字典(dict,键值对)
person = {"name": "赵六", "age": 28, "city": "Shanghai"}
person["job"] = "Engineer"  # 添加键值对
print(f"字典:{person},键:{person.keys()},值:{person.values()}")
# 字典推导式
score_dict = {subject: score for subject, score in [("语文",90), ("数学",95)]}
print(f"字典推导式:{score_dict}")
# 3. 集合(set,去重+无序)
nums_set = {1, 2, 2, 3, 3, 3}
nums_set.add(4)
nums_set.remove(2)
print(f"集合:{nums_set}")
# 4. 元组(tuple,不可变)
point = (10, 20)
print(f"元组:{point},类型:{type(point)}")
# point[0] = 15  # 错误:元组不可修改
2.2.5 函数特性(默认参数+可变参数+装饰器)
# 1. 带默认参数的函数
def greet(name, msg="你好"):
return f"{msg}{name}!"
# 2. 可变参数函数(*args:位置参数,**kwargs:关键字参数)
def print_info(*args, **kwargs):
print(f"位置参数:{args},关键字参数:{kwargs}")
# 3. 多返回值函数(本质返回元组)
def calculate(a, b):
return a + b, a - b
# 4. 装饰器(增强函数功能,无侵入)
def log(func):
def wrapper(*args, **kwargs):
print(f"调用函数:{func.__name__},参数:{args}, {kwargs}")
res = func(*args, **kwargs)
print(f"函数返回:{res}")
return res
return wrapper
@log  # 给add函数添加log装饰器
def add(a, b):
return a + b
if __name__ == "__main__":
# 默认参数调用
print(greet("张三"))  # 你好,张三!
print(greet("李四", "早上好"))  # 早上好,李四!
# 可变参数调用
print_info(1, 2, 3, name="王五", age=25)
# 多返回值调用
sum_val, diff_val = calculate(10, 5)
print(f"10+5={sum_val},10-5={diff_val}")
# 装饰器调用
add(8, 2)  # 会打印日志
2.2.6 类与面向对象(单继承+多态)
# 1. 父类
class Animal:
def __init__(self, name):
self.name = name  # 实例属性
def eat(self):
print(f"{self.name}在吃东西")
def make_sound(self):
print(f"{self.name}发出声音")
# 2. 子类(单继承)
class Dog(Animal):
# 重写构造方法
def __init__(self, name, breed):
super().__init__(name)  # 调用父类构造
self.breed = breed  # 子类新增属性
# 重写父类方法(多态)
def make_sound(self):
print(f"{self.name}{self.breed})汪汪叫")
# 子类新增方法
def fetch(self):
print(f"{self.name}在叼飞盘")
# 3. 类方法与静态方法
class Person:
species = "人类"  # 类属性
@classmethod
def get_species(cls):
return cls.species
@staticmethod
def is_adult(age):
return age >= 18
if __name__ == "__main__":
# 子类实例化
dog = Dog("旺财", "金毛")
dog.eat()  # 调用父类方法:旺财在吃东西
dog.make_sound()  # 调用子类重写方法:旺财(金毛)汪汪叫
dog.fetch()  # 调用子类方法:旺财在叼飞盘
# 多态:父类引用指向子类实例
animal: Animal = Dog("来福", "泰迪")
animal.make_sound()  # 来福(泰迪)汪汪叫
# 类方法与静态方法
print(Person.get_species())  # 人类
print(Person.is_adult(20))  # True
2.2.7 并发编程(线程+进程+协程)
import threading
import multiprocessing
import asyncio
import time
# 1. 线程任务(IO密集型)
def thread_task(id):
time.sleep(1)
print(f"线程任务 {id} 完成")
# 2. 进程任务(CPU密集型,突破GIL)
def process_task(id):
time.sleep(1)
print(f"进程任务 {id} 完成")
# 3. 协程任务(高效IO密集型)
async def async_task(id):
await asyncio.sleep(1)  # 异步睡眠,不阻塞线程
print(f"协程任务 {id} 完成")
async def main_async():
tasks = [async_task(i) for i in range(1, 4)]
await asyncio.gather(*tasks)
if __name__ == "__main__":
# 测试线程
print("=== 线程测试 ===")
start = time.time()
threads = [threading.Thread(target=thread_task, args=(i,)) for i in range(1, 4)]
for t in threads:
t.start()
for t in threads:
t.join()
print(f"线程总耗时:{time.time()-start:.2f}s\n")
# 测试进程
print("=== 进程测试 ===")
start = time.time()
processes = [multiprocessing.Process(target=process_task, args=(i,)) for i in range(1, 4)]
for p in processes:
p.start()
for p in processes:
p.join()
print(f"进程总耗时:{time.time()-start:.2f}s\n")
# 测试协程
print("=== 协程测试 ===")
start = time.time()
asyncio.run(main_async())
print(f"协程总耗时:{time.time()-start:.2f}s")
2.2.8 包管理与运行环境
# 1. 模块导入
import sys
import os
from datetime import datetime  # 从模块导入指定成员
import numpy as np  # 第三方库(需pip install numpy)
# 2. 包结构(目录+__init__.py)
# mypackage/
#   __init__.py
#   module1.py
#   module2.py
# 导入:from mypackage import module1
if __name__ == "__main__":
print("当前时间:", datetime.now())
print("numpy版本:", np.__version__)
# 3. 依赖管理
# 生成依赖清单:pip freeze > requirements.txt
# 安装依赖:pip install -r requirements.txt
# 虚拟环境:python -m venv myenv(创建)→ myenv\Scripts\activate(激活Windows)
# 运行方式:python 脚本名.py
# 打包为exe:pyinstaller -F 脚本名.py(需pip install pyinstaller)

2.3 Java语言:稳健跨平台的“企业级标杆”

Java 语法的核心是“静态强类型、类级结构、规范约束”,通过严格的语法设计保障代码稳健性,适合大型复杂系统开发。

2.3.1 变量声明与类型系统(静态强类型+自动装箱)
public class VariableDemo {
// 1. 静态变量(类级别,默认初始化)
public static int staticInt; // 默认0
public static String staticStr; // 默认null
// 2. 成员变量(实例级别,默认初始化)
private String name; // 默认null
private int age; // 默认0
public static void main(String[] args) {
// 3. 局部变量(必须手动初始化)
int num = 10;
String city = "Shanghai";
double score = 95.0;
boolean isPass = true;
// 打印变量
System.out.printf("局部变量:num=%d(%s), city=%s(%s)%n",
num, num.getClass().getName(), city, city.getClass().getName());
// 4. 自动装箱/拆箱(基本类型↔包装类)
int primitiveInt = 20;
Integer wrapperInt = primitiveInt; // 装箱(int→Integer)
int unboxInt = wrapperInt; // 拆箱(Integer→int)
System.out.printf("包装类:wrapperInt=%d(%s)%n", wrapperInt, wrapperInt.getClass().getName());
// 5. 指针(引用类型)
String str1 = new String("Java");
String str2 = str1; // str2指向str1的地址
System.out.printf("str1==str2:%b(地址相同)%n", str1 == str2); // true
}
}
2.3.2 流程控制(完整循环+switch穿透)
public class ControlFlowDemo {
public static void main(String[] args) {
// 1. if-else
int score = 88;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好"); // 输出
} else {
System.out.println("合格");
}
// 2. for循环(普通+增强)
System.out.println("普通for循环:");
for (int i = 0; i < 3; i++) {
System.out.printf("i=%d ", i); // 0 1 2
}
System.out.println();
// 增强for(遍历数组)
String[] fruits = {"apple", "banana", "orange"};
System.out.println("增强for循环:");
for (String fruit : fruits) {
System.out.printf("%s ", fruit); // apple banana orange
}
System.out.println();
// 3. while循环
System.out.println("while循环:");
int j = 0;
while (j < 3) {
System.out.printf("j=%d ", j); // 0 1 2
j++;
}
System.out.println();
// 4. do-while循环(至少执行1次)
System.out.println("do-while循环:");
int k = 0;
do {
System.out.printf("k=%d ", k); // 0 1 2
k++;
} while (k < 3);
System.out.println();
// 5. switch-case(需break,否则穿透)
String fruit = "banana";
switch (fruit) {
case "apple":
System.out.println("苹果");
break;
case "banana":
System.out.println("香蕉"); // 输出
break;
default:
System.out.println("未知水果");
}
// Java14+ 表达式式switch
int num = 3;
String result = switch (num) {
case 1 -> "一";
case 2 -> "二";
case 3 -> "三";
default -> "未知";
};
System.out.println("switch结果:" + result); // 三
}
}
2.3.3 异常处理(try-catch+Checked Exception)
import java.io.IOException;
// 1. 自定义Checked Exception(继承Exception)
class NegativeNumberException extends Exception {
public NegativeNumberException(String msg) {
super(msg);
}
}
// 自定义RuntimeException(继承RuntimeException,无需编译时检查)
class ZeroDivisionException extends RuntimeException {
public ZeroDivisionException(String msg) {
super(msg);
}
}
public class ExceptionDemo {
// 方法声明抛出Checked Exception(调用者必须处理)
public static int divide(int a, int b) throws NegativeNumberException {
if (b == 0) {
throw new ZeroDivisionException("除数不能为0"); // 运行时异常
}
if (a < 0 || b < 0) {
throw new NegativeNumberException("参数不能为负数"); // Checked异常
}
return a / b;
}
public static void main(String[] args) {
try {
int res = divide(15, 3);
System.out.println("15/3=" + res); // 5
} catch (NegativeNumberException e) {
System.out.println("错误1:" + e.getMessage());
} catch (ZeroDivisionException e) {
System.out.println("错误1:" + e.getMessage());
}
// 捕获运行时异常
try {
divide(10, 0);
} catch (NegativeNumberException e) {
System.out.println("错误2:" + e.getMessage());
} catch (ZeroDivisionException e) {
System.out.println("错误2:" + e.getMessage()); // 输出
} finally {
System.out.println("无论是否出错,执行finally");
}
// 处理Checked Exception(throws抛给上层)
try {
divide(-8, 2);
} catch (NegativeNumberException e) {
System.out.println("错误3:" + e.getMessage()); // 输出
}
}
}
2.3.4 数据结构(数组+集合框架)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DataStructureDemo {
public static void main(String[] args) {
// 1. 数组(固定长度)
int[] arr = {10, 20, 30};
System.out.printf("数组:长度=%d,元素:", arr.length);
for (int num : arr) {
System.out.printf("%d ", num); // 10 20 30
}
System.out.println();
// 2. 动态集合(ArrayList,需导包)
List<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.set(1, "pear"); // 修改元素list.remove(0); // 删除元素System.out.printf("ArrayList:大小=%d,元素:%s%n", list.size(), list);// 3. 字典(HashMap)Map<String, Integer> map = new HashMap<>();map.put("语文", 90);map.put("数学", 95);map.put("英语", 88);System.out.printf("HashMap:大小=%d,数学成绩:%d%n", map.size(), map.get("数学"));// 遍历HashMapSystem.out.println("HashMap遍历:");for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.printf("%s:%d分%n", entry.getKey(), entry.getValue());}}}
2.3.5 函数特性(重载+重写+可变参数)
public class FunctionDemo {
// 1. 函数重载(参数类型不同)
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
// 函数重载(参数个数不同)
public static int add(int a, int b, int c) {
return a + b + c;
}
// 2. 可变参数函数(int... args,本质是数组)
public static int sum(int... args) {
int total = 0;
for (int num : args) {
total += num;
}
return total;
}
// 3. 多返回值(通过数组包装)
public static int[] calculate(int a, int b) {
return new int[]{a + b, a - b};
}
public static void main(String[] args) {
// 调用重载函数
System.out.println("10+20=" + add(10, 20)); // 30
System.out.println("3.5+4.5=" + add(3.5, 4.5)); // 8.0
System.out.println("1+2+3=" + add(1, 2, 3)); // 6
// 调用可变参数函数
System.out.println("1+2+3+4=" + sum(1, 2, 3, 4)); // 10
System.out.println("10+20+30=" + sum(new int[]{10, 20, 30})); // 60
// 调用多返回值函数
int[] results = calculate(15, 5);
System.out.println("15+5=" + results[0] + ",15-5=" + results[1]); // 20,10
}
}
2.3.6 类与面向对象(类+接口+泛型)
// 1. 接口(定义规范)
interface Greetable {
void greet();
}
// 2. 父类
abstract class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + "在吃东西");
}
// 抽象方法(子类必须实现)
public abstract void makeSound();
}
// 3. 子类(继承Animal,实现Greetable接口)
class Dog extends Animal implements Greetable {
private String breed;
public Dog(String name, String breed) {
super(name); // 调用父类构造
this.breed = breed;
}
// 重写父类抽象方法
@Override
public void makeSound() {
System.out.println(name + "(" + breed + ")汪汪叫");
}
// 实现接口方法
@Override
public void greet() {
System.out.println("你好,我是" + name + "!");
}
}
public class OOPDemo {
public static void main(String[] args) {
// 多态:父类引用指向子类实例
Animal animal = new Dog("旺财", "金毛");
animal.eat(); // 旺财在吃东西
animal.makeSound(); // 旺财(金毛)汪汪叫
// 接口引用指向实现类实例
Greetable greetable = new Dog("来福", "泰迪");
greetable.greet(); // 你好,我是来福!
}
}
2.3.7 并发编程(线程池+CompletableFuture)
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ConcurrentDemo {
// 线程池(固定3个线程,复用线程)
private static final ExecutorService executor = Executors.newFixedThreadPool(3);
// 耗时任务
public static String task(int id) {
try {
TimeUnit.SECONDS.sleep(1); // 模拟1秒耗时
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return "任务" + id + "被中断";
}
return "任务" + id + "完成";
}
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
// 异步任务(CompletableFuture)
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> task(1), executor);CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> task(2), executor);CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> task(3), executor);// 等待所有任务完成CompletableFuture.allOf(future1, future2, future3).get();// 获取结果System.out.println(future1.get());System.out.println(future2.get());System.out.println(future3.get());// 总耗时约1秒long duration = (System.currentTimeMillis() - start) / 1000;System.out.printf("总耗时:%ds%n", duration);// 关闭线程池executor.shutdown();}}
2.3.8 包管理与运行环境
// 1. 包声明(必须放在文件第一行)
package com.example;
// 2. 导入包(标准库/第三方库)
import java.util.Date;
import org.springframework.boot.SpringApplication; // 第三方库(Maven/Gradle依赖)
// 3. 主类(程序入口)
public class Main {
public static void main(String[] args) {
System.out.println("当前时间:" + new Date());
}
}
// 4. 依赖管理(Maven)
// pom.xml中配置依赖:
// <dependency>
//     <groupId>org.springframework.boot</groupId>
//     <artifactId>spring-boot-starter</artifactId>
//     <version>2.7.0</version>
// </dependency>
// 5. 编译与运行
// 编译:javac -d target src/main/java/com/example/Main.java(生成.class字节码)
// 运行:java com.example.Main
// 打包:mvn package(生成JAR/WAR包)
// 部署:需安装JDK/JRE,运行java -jar 包名.jar

三、核心技术特点深度剖析

3.1 Go语言:简洁与性能的平衡

3.2 Python语言:动态与效率的极致

  • 语法设计:动态类型无需声明,缩进代替大括号,语法糖丰富(列表推导式、装饰器、f-string),开发效率极高,适合快速原型开发;
  • 生态优势:第三方库覆盖全场景(数据分析Pandas、AI TensorFlow、Web Django),开箱即用,降低开发门槛;
  • 并发局限:GIL(全局解释器锁)导致多线程无法利用多核,需用多进程(CPU密集型)或协程(IO密集型)规避;
  • 性能特点:纯Python执行较慢,但可通过C扩展(NumPy)、PyPy编译器加速,适合IO密集型、数据处理场景。

3.3 Java语言:稳健与跨平台的标杆

四、场景化选型建议

应用场景推荐语言选型理由
编程入门、快速原型开发Python语法简洁,无类型约束,快速上手,开发效率高
数据分析、AI/ML、自动化Python生态丰富,第三方库开箱即用,数据处理语法友好
云原生、微服务、网络编程Go并发高效,编译部署简单,内存占用低,适合容器化
企业级后端、大型系统Java稳健性强,类型安全,团队协作成本低,生态完善(Spring)
安卓开发、大数据处理Java安卓SDK原生支持,Hadoop生态深度绑定
嵌入式、高性能计算Go静态编译,二进制体积小,执行速度快,内存控制精细
高并发IO密集型服务Go/Python(协程)Go的Goroutine或Python的asyncio均高效处理IO
金融、电商核心系统Java稳定性强,事务支持完善,工具链成熟(调试、监控)

五、总结

三种语言的语法设计和核心特性,本质是“设计哲学+适用场景”的体现:

对于学习者,建议先掌握Python建立编程思维,再通过对比迁移到Go/Java;对于技术选型,核心是“匹配场景需求”——效率优先选Python,稳健优先选Java,性能与部署优先选Go。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据交易中的数据质量评估方法

数据交易避坑指南&#xff1a;从头搭建你的数据质量评估体系 一、引言&#xff1a;数据交易中&#xff0c;你踩过多少“质量坑”&#xff1f; 去年&#xff0c;我帮一家零售企业做数据交易咨询时&#xff0c;遇到过一个典型的“踩坑案例”&#xff1a; 这家企业花20万买了一份“…

数据结构3.0 栈、队列和数组

一、栈的基本概念①栈的定义②栈的基本操作③常考题型④小结二、栈的顺序存储实现①顺序栈的定义②初始化操作③进栈操作④出栈操作⑤读栈顶元素操作⑥共享栈⑦小结三、栈的链式存储实现①链栈的定义②小结#include <stdio.h> #include <stdlib.h>// 链栈的结点结构…

算子优化实战:手写 Triton Kernel,将 LayerNorm 算子的执行时间压缩 50%

标签: #Triton #CUDA #AICompiler #HPC #PyTorch #LayerNorm 📉 前言:为什么 PyTorch 原生算子还不够快? PyTorch 的 torch.nn.LayerNorm 虽然底层调用了 cuDNN 或 ATen 的优化实现,但在处理特定 Shape 或与其他算子结合时,依然存在性能损耗: 显存带宽瓶颈:LayerNorm…

深度测评自考必备一键生成论文工具TOP8

深度测评自考必备一键生成论文工具TOP8 自考论文写作工具测评&#xff1a;为何需要一份权威榜单&#xff1f; 随着自考人数逐年攀升&#xff0c;论文写作成为众多考生面临的“拦路虎”。从选题构思到内容撰写&#xff0c;再到格式调整&#xff0c;每一个环节都可能成为拖延或出…

Linux实操篇

1.1.vim快速入门1.2 vim快捷键1.3用户关机重启1.4登录注销 2.1用户管理12.2用户管理2

51单片机智能遮阳篷窗户帘衣架蓝牙APP光雨滴检测41(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

51单片机智能遮阳篷窗户帘衣架蓝牙APP光雨滴检测41(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 产品功能描述&#xff1a; 本系统由STC89C52单片机、雨滴传感器、光照传感器、蓝牙模块、继电器、拨动开关及电源组成 1、可以…

Java 并发探秘:JCTools 源码剖析,为什么 Netty 放弃 JDK 自带队列而选择 MpscArrayQueue?

标签&#xff1a; #Java #Netty #JCTools #Concurrency #Performance #FalseSharing&#x1f422; 前言&#xff1a;JDK 队列的痛点 在 Netty 的 Reactor 线程模型中&#xff0c;EventLoop 本质上是一个单线程的执行器。 它需要处理两类任务&#xff1a; IO 事件&#xff1a;来…

todo

todo作者很懒,所以经常会立flag,这里是他写下的todo list QAQtodo 创建时间 状态埃氏筛分块筛法 26/1/18 未完成

Go 调度器 (GMP) 揭秘:从汇编角度看 Goroutine 是如何实现“协程切换”的?

标签&#xff1a; #Go #Golang #GMP #Assembly #Runtime #Concurrency&#x1f680; 前言&#xff1a;GMP 的本质是“复用” 操作系统线程&#xff08;OS Thread&#xff09;太重了。创建一个线程需要 1-8MB 栈内存&#xff0c;切换一次需要进入内核态&#xff0c;耗时 1-2 微秒…

【创新未发表】基于matlab鸡群算法CSO和自适应双种群协同鸡群算法ADPCCSO无人机避障三维航迹规划【含Matlab源码 14980期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

第 174 场双周赛Q2——3810. 变成目标数组的最少操作次数

题目链接&#xff1a;3810. 变成目标数组的最少操作次数&#xff08;中等&#xff09; 算法原理&#xff1a; 解法&#xff1a;模拟 38ms击败11.30% 时间复杂度O(N) ①先计算出哪些是需要修改的 ②统计需要修改的下标 ③原数组中相同的数可以一起修改&#xff0c;所以只要统计不…

【无人机三维路径规划】基于matlab鸡群算法CSO和自适应双种群协同鸡群算法ADPCCSO复杂山地模型下无人机路径规划【含Matlab源码 14981期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

Day22-20260118

摘要 本文实现了一个基于Java的交互式计算器程序,具有加减乘除四种运算功能。程序通过定义四个独立的方法(add、subtract、multiply、divide)实现基本运算,采用while循环和switch结构实现用户交互界面。用户可以循环…

强烈安利9个AI论文写作软件,专科生搞定毕业论文!

强烈安利9个AI论文写作软件&#xff0c;专科生搞定毕业论文&#xff01; 论文写作的救星&#xff0c;AI 工具如何改变你的学术之路 对于专科生来说&#xff0c;毕业论文可能是大学生活中最令人头疼的一关。从选题、查资料到撰写、修改&#xff0c;每一步都充满了挑战。而如今&a…

【雷达跟踪】基于matlab面向目标跟踪的雷达干扰方法:提升航空器战场生存力的关键技术【含Matlab源码 14983期】复现含文献

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【雷达相控阵】毫米波相控阵中空间Zadoff-Chu调制快速波束对准【含Matlab源码 14977期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab领域博客之家&#x1f49e;&…

卷积神经网络的开端:$LeNet-5$

卷积神经网络的开端:\(LeNet-5\)[!NOTE] LeNet-5神经网络是1998年YANN LECUN等人在论文Gradient-Based Learning Applied to Document Recognition中提出的一种颠覆性的算法。 说实在的该方法本来是用来解决手写字母也…

【雷达相控阵】基于matlab毫米波相控阵中空间Zadoff-Chu调制快速波束对准【含Matlab源码 14977期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【心电信号ECG】SVM心电图心搏检测与分类【含Matlab源码 14982期】复现含文献

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab领域博客之家&#x1f49e;&…

【心电信号ECG】基于matlab SVM心电图心搏检测与分类【含Matlab源码 14982期】复现含文献

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…