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

Python入门(7)--高级函数特性详解

Python高级函数特性详解 🚀

目录

  1. 匿名函数(Lambda)
  2. 装饰器的使用
  3. 生成器与迭代器
  4. 递归函数应用
  5. 实战案例:文件批处理工具

1. 匿名函数(Lambda)深入解析 🎯

1.1 Lambda函数基础与进阶

1.1.1 基本语法与类型注解
from typing import Callable, List, Any, Dict, Optional, Union# 基础lambda函数(带类型注解)
square: Callable[[int], int] = lambda x: x ** 2
greeting: Callable[[str, Optional[str]], str] = lambda name, msg="你好": f"{msg}, {name}!"# 带类型注解的复杂lambda函数
process_data: Callable[[Dict[str, Any]], List[Any]] = lambda d: [v for k, v in d.items() if isinstance(v, (int, float))]
1.1.2 函数式编程应用
# 1. 组合多个lambda函数
compose = lambda f, g: lambda x: f(g(x))
double = lambda x: x * 2
increment = lambda x: x + 1# 先加1再乘2
double_after_increment = compose(double, increment)
print(double_after_increment(3))  # 输出: 8# 2. 柯里化示例
curry = lambda f: lambda x: lambda y: f(x, y)
add = lambda x, y: x + y
curried_add = curry(add)
increment = curried_add(1)
print(increment(5))  # 输出: 6# 3. 偏函数应用
from functools import partial
multiply = lambda x, y: x * y
double = partial(multiply, 2)
print(double(4))  # 输出: 8

1.2 Lambda函数实战应用

1.2.1 数据处理与转换
# 1. 复杂数据结构处理
users = [{"name": "张三", "age": 25, "salary": 8000, "department": "技术"},{"name": "李四", "age": 30, "salary": 12000, "department": "销售"},{"name": "王五", "age": 28, "salary": 15000, "department": "技术"},{"name": "赵六", "age": 35, "salary": 20000, "department": "管理"}
]# 按多个条件排序(先按部门,再按薪资降序)
sorted_users = sorted(users,key=lambda u: (u["department"], -u["salary"])
)# 数据转换和筛选
tech_salaries = list(map(lambda u: u["salary"],filter(lambda u: u["department"] == "技术", users)
))# 2. 数据聚合
from collections import defaultdict# 按部门统计平均薪资
dept_avg_salary = defaultdict(list)
for user in users:dept_avg_salary[user["department"]].append(user["salary"])dept_averages = {dept: sum(salaries) / len(salaries)for dept, salaries in dept_avg_salary.items()
}
1.2.2 事件处理与回调
class EventSystem:def __init__(self):self.handlers: Dict[str, List[Callable]] = defaultdict(list)def register(self, event_name: str, handler: Callable) -> None:self.handlers[event_name].append(handler)def trigger(self, event_name: str, *args, **kwargs) -> None:for handler in self.handlers[event_name]:handler(*args, **kwargs)# 使用lambda作为事件处理器
event_system = EventSystem()# 注册多个简单的事件处理器
event_system.register("user_login", lambda user: print(f"用户 {user} 登录"))
event_system.register("user_login", lambda user: print(f"发送欢迎邮件给 {user}"))# 注册带条件判断的处理器
event_system.register("payment",lambda amount, user: print(f"大额支付警告: {user} 支付了 {amount}元")if amount > 10000 else None
)

1.3 Lambda函数最佳实践与性能考虑

1.3.1 性能优化技巧
from timeit import timeit
import operator# 1. 使用operator模块替代简单lambda
numbers = list(range(1000))# 不推荐
lambda_time = timeit(lambda: list(map(lambda x: x + 1, numbers)), number=1000)# 推荐
operator_time = timeit(lambda: list(map(operator.add, numbers, [1]*len(numbers))), number=1000)# 2. 缓存计算结果
from functools import lru_cache# 使用缓存装饰器包装lambda
cached_computation = lru_cache(maxsize=128)(lambda x: sum(i * i for i in range(x)))
1.3.2 代码可维护性建议
# ✅ 适合使用Lambda的场景
# 1. 简单的键函数
sorted_items = sorted(items, key=lambda x: x.priority)# 2. 简单的数据转换
transformed = map(lambda x: x.upper(), items)# 3. 简单的过滤条件
filtered = filter(lambda x: x > 0, numbers)# ❌ 不建议使用Lambda的场景
# 1. 复杂的业务逻辑
# 不推荐
process = lambda data: {k: [i * 2 for i in v if i > 0]for k, v in data.items()if isinstance(v, list)
}# ✅ 推荐使用常规函数
def process_data(data: Dict[str, List[int]]) -> Dict[str, List[int]]:"""处理数据集合Args:data: 输入数据字典Returns:处理后的数据字典"""result = {}for key, values in data.items():if isinstance(values, list):result[key] = [i * 2 for i in values if i > 0]return result

1.4 实战示例:数据分析管道

from typing import List, Dict, Any
from datetime import datetimeclass DataPipeline:"""数据处理管道"""def __init__(self):self.transforms: List[Callable] = []def add_transform(self, transform: Callable) -> 'DataPipeline':"""添加转换步骤"""self.transforms.append(transform)return selfdef process(self, data: List[Dict[str, Any]]) -> List[Dict[str, Any]]:"""执行所有转换"""result = datafor transform in self.transforms:result = transform(result)return result# 使用示例
# 1. 创建转换函数
filter_active = lambda data: [item for item in dataif item.get('status') == 'active'
]calculate_metrics = lambda data: [{**item, 'efficiency': item['output'] / item['input'] if item['input'] else 0}for item in data
]add_timestamp = lambda data: [{**item, 'processed_at': datetime.now().isoformat()}for item in data
]# 2. 构建和使用管道
pipeline = DataPipeline()
pipeline.add_transform(filter_active)\.add_transform(calculate_metrics)\.add_transform(add_timestamp)# 3. 处理数据
sample_data = [{'id': 1, 'status': 'active', 'input': 100, 'output': 85},{'id': 2, 'status': 'inactive', 'input': 90, 'output': 70},{'id': 3, 'status': 'active', 'input': 95, 'output': 80}
]processed_data = pipeline.process(sample_data)

2. 装饰器的使用 🎨

2.1 基本装饰器

from functools import wraps
import time
from typing import Callable, TypeVar, AnyT = TypeVar('T', bound=Callable[..., Any])def timing_decorator(func: T) -> T:"""测量函数执行时间的装饰器"""@wraps(func)def wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"函数 {func.__name__} 执行时间: {end_time - start_time:.4f} 秒")return resultreturn wrapper@timing_decorator
def slow_function():time.sleep(1)return "完成"

2.2 带参数的装饰器

def retry(max_attempts: int = 3, delay: float = 1.0):"""创建一个重试装饰器Args:max_attempts: 最大重试次数delay: 重试间隔(秒)"""def decorator(func: Callable) -> Callable:@wraps(func)def wrapper(*args, **kwargs):attempts = 0while attempts < max_attempts:try:return func(*args, **kwargs)except Exception as e:attempts += 1if attempts == max_attempts:raise etime.sleep(delay)return Nonereturn wrapperreturn decorator@retry(max_attempts=3, delay=2.0)
def unstable_network_call():"""模拟不稳定的网络调用"""if random.random() < 0.7:  # 70%的失败率raise ConnectionError("网络连接失败")return "成功"

2.3 多个装饰器的组合

def log_decorator(func: Callable) -> Callable:@wraps(func)def wrapper(*args, **kwargs):print(f"调用函数: {func.__name__}")return func(*args, **kwargs)return wrapperdef validate_inputs(func: Callable) -> Callable:@wraps(func)def wrapper(*args, **kwargs):if not args and not kwargs:raise ValueError("函数参数不能为空")return func(*args, **kwargs)return wrapper@log_decorator
@validate_inputs
@timing_decorator
def process_data(data: List[Any]) -> List[Any]:"""处理数据的函数"""return [item for item in data if item is not None]

3. 生成器与迭代器 🔄

3.1 生成器函数

from typing import Generator, Iterator, Listdef fibonacci_generator(n: int) -> Generator[int, None, None]:"""生成斐波那契数列的生成器Args:n: 要生成的数字个数Yields:斐波那契数列中的下一个数字"""a, b = 0, 1for _ in range(n):yield aa, b = b, a + b# 内存效率对比
def get_numbers_list(n: int) -> List[int]:"""返回列表的方式"""return [i ** 2 for i in range(n)]def get_numbers_generator(n: int) -> Generator[int, None, None]:"""生成器方式"""for i in range(n):yield i ** 2

3.2 生成器表达式

# 列表推导式 vs 生成器表达式
numbers = [1, 2, 3, 4, 5]# 列表推导式(立即计算)
squares_list = [x ** 2 for x in numbers]  # 创建新列表# 生成器表达式(惰性计算)
squares_gen = (x ** 2 for x in numbers)   # 创建生成器对象# 条件筛选
even_squares = (x ** 2 for x in numbers if x % 2 == 0)# 多重生成器
matrix = ((i, j) for i in range(3) for j in range(3))

3.3 自定义迭代器

class DataIterator:"""自定义数据迭代器"""def __init__(self, data: List[Any]):self.data = dataself.index = 0def __iter__(self) -> 'DataIterator':return selfdef __next__(self) -> Any:if self.index >= len(self.data):raise StopIterationvalue = self.data[self.index]self.index += 1return value# 使用示例
class DataContainer:def __init__(self, data: List[Any]):self.data = datadef __iter__(self) -> DataIterator:return DataIterator(self.data)

4. 递归函数应用 🌳

4.1 基本递归模式

from typing import Any, List, Optionaldef factorial(n: int) -> int:"""计算阶乘的递归实现"""if n <= 1:  # 基本情况return 1return n * factorial(n - 1)  # 递归情况def binary_search(arr: List[int], target: int, left: int = 0, right: Optional[int] = None) -> int:"""递归实现二分查找Returns:目标值的索引,如果未找到返回-1"""if right is None:right = len(arr) - 1if left > right:return -1mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] > target:return binary_search(arr, target, left, mid - 1)else:return binary_search(arr, target, mid + 1, right)

4.2 高级递归应用

class TreeNode:def __init__(self, value: Any):self.value = valueself.left: Optional[TreeNode] = Noneself.right: Optional[TreeNode] = Nonedef tree_traversal(root: Optional[TreeNode], method: str = "inorder") -> Generator[Any, None, None]:"""通用的树遍历生成器Args:root: 树的根节点method: 遍历方法 ("preorder", "inorder", "postorder")"""if not root:returnif method == "preorder":yield root.valueyield from tree_traversal(root.left, method)yield from tree_traversal(root.right, method)elif method == "inorder":yield from tree_traversal(root.left, method)yield root.valueyield from tree_traversal(root.right, method)elif method == "postorder":yield from tree_traversal(root.left, method)yield from tree_traversal(root.right, method)yield root.value

5. 实战案例:文件批处理工具 🛠️

5.1 文件处理工具类

from pathlib import Path
from typing import Generator, List, Dict, Callable
import os
import shutilclass FileBatchProcessor:"""文件批处理工具"""def __init__(self, source_dir: str):self.source_dir = Path(source_dir)self.processors: Dict[str, Callable] = {}def register_processor(self, extension: str, processor: Callable) -> None:"""注册文件处理器"""self.processors[extension] = processordef find_files(self, pattern: str = "*") -> Generator[Path, None, None]:"""递归查找文件"""for item in self.source_dir.rglob(pattern):if item.is_file():yield itemdef process_files(self) -> Dict[str, List[str]]:"""处理所有文件"""results = {"success": [], "error": []}for file_path in self.find_files():try:extension = file_path.suffix.lower()if extension in self.processors:self.processors[extension](file_path)results["success"].append(str(file_path))except Exception as e:results["error"].append(f"{file_path}: {str(e)}")return results

5.2 实际应用示例

# 文件处理器函数
def process_text_file(file_path: Path) -> None:"""处理文本文件"""with file_path.open('r', encoding='utf-8') as f:content = f.read()# 处理文本内容processed_content = content.upper()# 保存处理后的文件backup_path = file_path.with_suffix(file_path.suffix + '.bak')shutil.copy2(file_path, backup_path)with file_path.open('w', encoding='utf-8') as f:f.write(processed_content)def process_image_file(file_path: Path) -> None:"""处理图片文件(示例)"""# 这里可以添加图片处理逻辑pass# 使用示例
def main():# 创建处理器实例processor = FileBatchProcessor("./documents")# 注册文件处理器processor.register_processor(".txt", process_text_file)processor.register_processor(".md", process_text_file)processor.register_processor(".jpg", process_image_file)processor.register_processor(".png", process_image_file)# 执行批处理results = processor.process_files()# 输出处理结果print(f"成功处理的文件: {len(results['success'])}")print(f"处理失败的文件: {len(results['error'])}")if results['error']:print("\n错误详情:")for error in results['error']:print(f"- {error}")if __name__ == "__main__":main()

本文详细介绍了Python的高级函数特性,从匿名函数到装饰器,从生成器到递归函数,最后通过一个实战案例展示了这些特性的实际应用。

希望这些内容对你的Python编程之旅有所帮助!

如果你觉得这篇文章有帮助,欢迎点赞转发,也期待在评论区看到你的想法和建议!👇

咱们下一期见!

相关文章:

Python入门(7)--高级函数特性详解

Python高级函数特性详解 &#x1f680; 目录 匿名函数&#xff08;Lambda&#xff09;装饰器的使用生成器与迭代器递归函数应用实战案例&#xff1a;文件批处理工具 1. 匿名函数&#xff08;Lambda&#xff09;深入解析 &#x1f3af; 1.1 Lambda函数基础与进阶 1.1.1 基本…...

【数据库原理】理解数据库,基础知识

第一代&#xff1a;网状数据库&#xff1b;第二代&#xff1a;关系数据库&#xff1b;第三代&#xff1a;新一代数据库系统BigData 一、理解数据库 什么是数据&#xff1a;信息&#xff0c;对事物的存在方方式、运动状态及特征的描述。数据&#xff0c;记录信息的识别方式有数…...

VConsole——(H5调试工具)前端开发使用于手机端查看控制台和请求发送

因为开发钉钉H5微应用在手机上一直查看不到日志等&#xff0c;出现安卓和苹果上传图片一边是成功的&#xff0c;一边是失败的&#xff0c;所以找了这个&#xff0c;之前在开发微信小程序进行调试的时候能看到&#xff0c;之前没想到过&#xff0c;这次被人提点发现可以单独使用…...

论文分享 | FuzzLLM:一种用于发现大语言模型中越狱漏洞的通用模糊测试框架

大语言模型是当前人工智能领域的前沿研究方向&#xff0c;在安全性方面大语言模型存在一些挑战和问题。分享一篇发表于2024年ICASSP会议的论文FuzzLLM&#xff0c;它设计了一种模糊测试框架&#xff0c;利用模型的能力去测试模型对越狱攻击的防护水平。 论文摘要 大语言模型中…...

vmWare虚拟环境centos7安装Hadoop 伪分布式实践

背景&#xff1a;近期在研发大数据中台&#xff0c;需要研究Hadoop hive 的各种特性&#xff0c;需要搭建一个Hadoop的虚拟环境&#xff0c;本来想着使用dock &#xff0c;但突然发现docker 公共仓库的镜像 被XX 了&#xff0c;无奈重新使用vm 搭建虚拟机。 大概经历了6个小时完…...

【C++入门(一)】半小时入门C++开发(深入理解new+List+范围for+可变参数)

目录 一.深入理解new 使用格式 二.List列表 定义一个列表 迭代器 添加元素 删除元素 排序 反转序列 三.范围for 四.可变参数 std::initializer_list 可变参数模板&#xff08;variadic template&#xff09; 一.深入理解new 类似于C语言中的malloc、calloc和reallo…...

Vue 3与TypeScript集成指南:构建类型安全的前端应用

在Vue 3中使用TypeScript&#xff0c;可以让你的组件更加健壮和易于维护。以下是使用TypeScript与Vue 3结合的详细步骤和知识点&#xff1a; 1. 环境搭建 首先&#xff0c;确保你安装了Node.js&#xff08;推荐使用最新的LTS版本&#xff09;和npm或Yarn。然后&#xff0c;安…...

MATLAB和Python发射光谱

在MATLAB和Python中&#xff0c;可以使用不同的库来生成发射光谱。以下是两种语言的简单示例&#xff1a; MATLAB: % 定义波长&#xff08;nm&#xff09;和强度&#xff08;a.u.&#xff09; wavelengths linspace(300, 1000, 1000); intensity sin(wavelengths / 500);…...

IEEE(常用)参考文献引用格式详解 | LaTeX参考文献规范(IEEE Trans、Conf、Arxiv)| 期刊会议名缩写查询

期刊 ** 期刊:已正式出版&#xff08;有期卷号) ** 期刊:录用后在线访问即Early access&#xff08;无期卷号&#xff09;会议Arxiv论文 期刊 期刊:已正式出版&#xff08;有期卷号&#xff09; article{gu2024ai, title{{AI}-Enhanced Cloud-Edge-Terminal Collaborative Ne…...

第二十周:机器学习

目录 摘要 ABSTRACT 一、吴恩达机器学习exp2——逻辑回归 1、logistic函数 2、数据预处理 3、损失函数 4、梯度下降 5、设定评价指标 6、决策边界 7、正则化 二、动手深度学习pytorch——数据预处理 1、数据集读取 2、缺失值处理 3、转换为张量格式 总结 摘要…...

Elasticsearch面试内容整理-Elasticsearch 基础概念

Elasticsearch 是一个基于 Apache Lucene 的开源分布式搜索和分析引擎,提供强大的全文本搜索、实时数据分析、分布式存储等功能。以下是 Elasticsearch 的一些基础概念: 什么是 Elasticsearch? ● Elasticsearch 是一个用于全文搜索和实时分析的分布式搜索引擎。 ● 开源和可…...

机器学习算法模型系列——Adam算法

Adam是一种自适应学习率的优化算法&#xff0c;结合了动量和自适应学习率的特性。 主要思想是根据参数的梯度来动态调整每个参数的学习率。 核心原理包括&#xff1a; 动量&#xff08;Momentum&#xff09;&#xff1a;Adam算法引入了动量项&#xff0c;以平滑梯度更新的方向…...

Qt按钮类-->day09

按钮基类 QAbstractButton 标题与图标 // 参数text的内容显示到按钮上 void QAbstractButton::setText(const QString &text); // 得到按钮上显示的文本内容, 函数的返回就是 QString QAbstractButton::text() const;// 得到按钮设置的图标 QIcon icon() const; // 给按钮…...

基于xr-frame实现微信小程序的手部、手势识别3D模型叠加和石头剪刀布游戏功能

前言 xr-frame是一套小程序官方提供的XR/3D应用解决方案&#xff0c;基于混合方案实现&#xff0c;性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。xr-frame在基础库v2.32.0开始基本稳定&#xff0c;发布为正式版&#xff0c;但仍有一些功能还在开发&#…...

基于Kafka2.1解读Consumer原理

文章目录 概要整体架构流程技术名词解释技术细节coordinatorfetcherclientconsumer#poll的主要流程 全局总览小结 概要 继上一篇讲Producer原理的文章过去已经一个多月了&#xff0c;今天来讲讲Consumer的原理。 其实源码早就读了部分了&#xff0c;但是最近工作比较忙&#x…...

深度学习:ResNet每一层的输出形状

其中 /**在输出通道数为64、步幅为2的7 7卷积层后&#xff0c;接步幅为2的3 3的最大汇聚层,与GoogLeNet区别是每个卷积层后增加了批量规范层**/ b1 nn.Sequential(nn.Conv2d(1, 64, kernel_size7, stride2, padding3),nn.BatchNorm2d(64), nn.ReLU(),nn.MaxPool2d(kernel_s…...

国内几大网络安全公司介绍 - 网络安全

Posted by zhaol under 安全 , 电信 , 评论 , 中国 中国国内的安全市场进入“战国时期”&#xff0c;启明星辰、绿盟、天融信、安氏、亿阳、联想网御、华为等战国七雄拥有雄厚的客户资源和资金基础&#xff0c;帐前皆有勇猛善战之士&#xff0c;渐渐开始统领国内安全市场的潮流…...

修改Android Studio项目配置JDK路径和项目Gradle路径的GUI工具

概述 本工具提供了一个基于Python Tkinter的图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于帮助用户搜索并更新Android Studio项目中的config.properties文件里的java.home路径&#xff0c;以及workspace.xml文件中的last_opened_file_path路径。该工具旨在简化手动…...

✅DAY30 贪心算法 | 452. 用最少数量的箭引爆气球 | 435. 无重叠区间 | 763.划分字母区间

452. 用最少数量的箭引爆气球 解题思路&#xff1a;首先把原数组按左边界进行排序。然后比较[i-1]的右边界和[i]的左边界是否重叠&#xff0c;如果重叠&#xff0c;更新当前右边界为最小右边界和[i1]的左边界判断是重叠。 class Solution:def findMinArrowShots(self, points:…...

关于Redis单线程模型以及IO多路复用的理解

IO多路复用 -> redis主线程 -> 事件队列 -> 事件处理器 1.IO多路复用机制的作用&#xff1a; 操作系统的多路复用机制&#xff08;如 epoll、select&#xff09;负责监听多个文件描述符&#xff08;如客户端连接&#xff09;上的事件。 当某个文件描述符上的事件就绪…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...