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

设计模式-行为型模式(模板方法、策略、观察者、迭代器、责任链、命令、状态、备忘录、访问者、中介者、解释器)

行为型模式:专注于对象之间的 协作 及如何通过彼此之间的交互来完成任务。行为型模式通常集中在描述对象之间的 责任 分配和 通信 机制,并提供了一些优雅解决特定问题的方案。

  1. 模板方法模式(Template Method Pattern)
  2. 策略模式(Strategy Pattern)
  3. 观察者模式(Observer Pattern)
  4. 迭代器模式(Iterator Pattern)
  5. 责任链模式(Chain of Responsibility Pattern)
  6. 命令模式(Command Pattern)
  7. 状态模式(State Pattern)
  8. 备忘录模式(Memento Pattern)
  9. 访问者模式(Visitor Pattern)
  10. 中介者模式(Mediator Pattern)
  11. 解释器模式(Interpreter Pattern)

模板方法模式(Template Method Pattern)

模板方法模式定义了一个算法骨架,将一些步骤延迟到子类中实现。这个模式使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。
from abc import ABC, abstractmethodclass Algorithm(ABC):def process_data(self, data):self.load_data(data)self.analyze_data()self.visualize_data()@abstractmethoddef load_data(self, data):pass@abstractmethoddef analyze_data(self):pass@abstractmethoddef visualize_data(self):passclass AudioProcessing(Algorithm):def load_data(self, data):print("Loading audio data...")def analyze_data(self):print("Analyzing audio data...")def visualize_data(self):print("Visualizing audio data...")class ImageProcessing(Algorithm):def load_data(self, data):print("Loading image data...")def analyze_data(self):print("Analyzing image data...")def visualize_data(self):print("Visualizing image data...")audio_processing = AudioProcessing()
image_processing = ImageProcessing()
audio_processing.process_data("Audio data")
image_processing.process_data("Image data")
"""
Loading audio data...
Analyzing audio data...
Visualizing audio data...
Loading image data...
Analyzing image data...
Visualizing image data...
"""

策略模式(Strategy Pattern)

策略模式定义了一系列算法,并将每个算法封装起来,再一个对外使用的类使得它们可以相互替换。
from abc import ABC, abstractmethodclass SortingStrategy(ABC):@abstractmethoddef sort(self, data):passclass MergeSort(SortingStrategy):def sort(self, data):print("Sorting data using merge sort...")class QuickSort(SortingStrategy):def sort(self, data):print("Sorting data using quick sort...")class BubbleSort(SortingStrategy):def sort(self, data):print("Sorting data using bubble sort...")class Sorter:def __init__(self, sorting_strategy):self.sorting_strategy = sorting_strategydef set_sorting_strategy(self, sorting_strategy):self.sorting_strategy = sorting_strategydef sort_data(self, data):self.sorting_strategy.sort(data)data = [5, 2, 4, 1, 3]
merge_sort = MergeSort()
quick_sort = QuickSort()
bubble_sort = BubbleSort()sorter = Sorter(merge_sort)
sorter.sort_data(data)sorter.set_sorting_strategy(quick_sort)
sorter.sort_data(data)sorter.set_sorting_strategy(bubble_sort)
sorter.sort_data(data)
"""
Sorting data using merge sort...
Sorting data using quick sort...
Sorting data using bubble sort...
"""

观察者模式(Observer Pattern)

定义一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,并在主题对象变化时得到通知。这个模式使主题对象和观察者对象可以相互独立变化。
class Subject:def __init__(self):self.observers = []def add_observer(self, observer):self.observers.append(observer)def remove_observer(self, observer):self.observers.remove(observer)def notify_observers(self, data):for observer in self.observers:observer.update(data)class Observer:def update(self, data):passclass Sensor(Subject):def read_sensor_data(self):data = 42  # read sensor data hereself.notify_observers(data)class Display(Observer):def update(self, data):print(f"Displaying sensor data: {data}")class Logging(Observer):def update(self, data):print(f"Logging sensor data: {data}")sensor = Sensor()
display = Display()
logging = Logging()sensor.add_observer(display)
sensor.add_observer(logging)sensor.read_sensor_data()
"""
Displaying sensor data: 42
Logging sensor data: 42
"""

迭代器模式(Iterator Pattern)

提供一种方法来访问一个聚合对象中各个元素,而不需暴露该对象的内部表示。这个模式使得我们可以遍历一个聚合对象,而不用关心其内部结构。
class MyList:def __init__(self):self.data = []def add_item(self, item):self.data.append(item)def __iter__(self):return MyListIterator(self)class MyListIterator:def __init__(self, my_list):self.my_list = my_listself.index = 0def __next__(self):if self.index >= len(self.my_list.data):raise StopIterationelse:item = self.my_list.data[self.index]self.index += 1return itemmy_list = MyList()
my_list.add_item("a")
my_list.add_item("b")
my_list.add_item("c")for item in my_list:print(item)
'''
a
b
c
'''

责任链模式(Chain of Responsibility Pattern)

将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求。这个模式将这些对象组成一条链,并沿着该链传递该请求,直到有一个对象处理它为止。
from abc import ABC, abstractmethodclass Handler(ABC):def __init__(self, successor=None):self.successor = successordef handle_request(self, request):if self.can_handle_request(request):self.process_request(request)elif self.successor is not None:self.successor.handle_request(request)@abstractmethoddef can_handle_request(self, request):pass@abstractmethoddef process_request(self, request):passclass ConcreteHandlerA(Handler):def can_handle_request(self, request):return request >= 0 and request < 3def process_request(self, request):print(f"Request {request} handled by ConcreteHandlerA")class ConcreteHandlerB(Handler):def can_handle_request(self, request):return request >= 3 and request < 6def process_request(self, request):print(f"Request {request} handled by ConcreteHandlerB")class ConcreteHandlerC(Handler):def can_handle_request(self, request):return request >= 6 and request < 9def process_request(self, request):print(f"Request {request} handled by ConcreteHandlerC")handler_a = ConcreteHandlerA()
handler_b = ConcreteHandlerB()
handler_c = ConcreteHandlerC()handler_a.successor = handler_b
handler_b.successor = handler_cfor request in range(1, 10):handler_a.handle_request(request)
"""
Request 1 handled by ConcreteHandlerA
Request 2 handled by ConcreteHandlerA
Request 3 handled by ConcreteHandlerB
Request 4 handled by ConcreteHandlerB
Request 5 handled by ConcreteHandlerB
Request 6 handled by ConcreteHandlerC
Request 7 handled by ConcreteHandlerC
Request 8 handled by ConcreteHandlerC
"""

命令模式(Command Pattern)

一个请求封装成一个对象,从而可将请求的发送者和接收者解耦。这个模式允许使用不同的请求来参数化对象,将请求排队或记录请求日志,以及支持可撤销的操作。
from abc import ABC, abstractmethodclass Command(ABC):@abstractmethoddef execute(self):pass@abstractmethoddef undo(self):passclass Light:def on(self):print("Light is on")def off(self):print("Light is off")class LightOnCommand(Command):def __init__(self, light):self.light = lightdef execute(self):self.light.on()def undo(self):self.light.off()class LightOffCommand(Command):def __init__(self, light):self.light = lightdef execute(self):self.light.off()def undo(self):self.light.on()class RemoteControl:def __init__(self):self.commands = []def add_command(self, command):self.commands.append(command)def execute_commands(self):for command in self.commands:command.execute()light = Light()
light_on_command = LightOnCommand(light)
light_off_command = LightOffCommand(light)remote_control = RemoteControl()
remote_control.add_command(light_on_command)
remote_control.add_command(light_off_command)remote_control.execute_commands()
"""
Light is on
Light is off
"""

状态模式(State Pattern)

允许对象在其内部状态发生改变时改变它的行为。这个模式将一个对象的状态从该对象中移出来,并将其封装到不同的状态对象中。
from abc import ABC, abstractmethodclass State(ABC):@abstractmethoddef handle(self):passclass ConcreteStateA(State):def handle(self):print("Handling state A")return ConcreteStateB()class ConcreteStateB(State):def handle(self):print("Handling state B")return ConcreteStateC()class ConcreteStateC(State):def handle(self):print("Handling state C")return ConcreteStateA()class Context:def __init__(self, initial_state):self.state = initial_statedef request(self):self.state = self.state.handle()context = Context(ConcreteStateA())
context.request()
context.request()
context.request()
"""
Handling state A
Handling state B
Handling state C
"""

备忘录模式(Memento Pattern)

允许在不破坏封装性的前提下,捕获并保存一个对象的内部状态,以便可以将该对象恢复到原先保存的状态。这个模式通常用于需要撤销操作的场景。
class Memento:  # 一个类记录状态返回状态def __init__(self, state):self.state = statedef get_state(self):return self.stateclass Originator:def __init__(self, state):self.state = statedef create_memento(self):return Memento(self.state)def restore_memento(self, memento):self.state = memento.get_state()def set_state(self, state):self.state = statedef get_state(self):return self.stateclass Caretaker:def __init__(self, originator):self.mementos = []self.originator = originatordef save_state(self):memento = self.originator.create_memento()self.mementos.append(memento)def restore_last_state(self):if len(self.mementos) > 0:memento = self.mementos.pop()self.originator.restore_memento(memento)originator = Originator("State A")
caretaker = Caretaker(originator)print(originator.get_state())
caretaker.save_state()originator.set_state("State B")
print(originator.get_state())caretaker.save_state()
originator.set_state("State C")
print(originator.get_state())caretaker.restore_last_state()
print(originator.get_state())caretaker.restore_last_state()
print(originator.get_state())
"""
State A
State B
State C
State B
State A
"""

访问者模式(Visitor Pattern)

定义了一种新的操作方式,可在不改变一个对象的类的前提下,向该对象添加新的操作。这个模式通常用于需对一个复杂的对象结构进行处理的场景。
from abc import ABC, abstractmethodclass Visitor(ABC):@abstractmethoddef visit_element_a(self, element_a):pass@abstractmethoddef visit_element_b(self, element_b):passclass Element(ABC):@abstractmethoddef accept(self, visitor):passclass ConcreteElementA(Element):  # 新操作def accept(self, visitor):visitor.visit_element_a(self)class ConcreteElementB(Element):  # 新操作def accept(self, visitor):visitor.visit_element_b(self)class ConcreteVisitor1(Visitor):def visit_element_a(self, element_a):print("ConcreteVisitor1 visiting ConcreteElementA")def visit_element_b(self, element_b):print("ConcreteVisitor1 visiting ConcreteElementB")class ConcreteVisitor2(Visitor):def visit_element_a(self, element_a):print("ConcreteVisitor2 visiting ConcreteElementA")def visit_element_b(self, element_b):print("ConcreteVisitor2 visiting ConcreteElementB")elements = [ConcreteElementA(), ConcreteElementB()]
visitors = [ConcreteVisitor1(), ConcreteVisitor2()]for element in elements:for visitor in visitors:element.accept(visitor)
'''
ConcreteVisitor1 visiting ConcreteElementA
ConcreteVisitor2 visiting ConcreteElementA
ConcreteVisitor1 visiting ConcreteElementB
ConcreteVisitor2 visiting ConcreteElementB
'''

中介者模式(Mediator Pattern)

定义了一个中介对象来封装一系列对象之间的交互。这个模式使得各对象之间不需要显式地相互引用,从而使其耦合度降低,同时也有助于复杂系统的维护。
from abc import ABC, abstractmethodclass Colleague(ABC):def __init__(self, mediator):self.mediator = mediator@abstractmethoddef send(self, message):pass@abstractmethoddef receive(self, message):passclass ConcreteColleagueA(Colleague):def send(self, message):self.mediator.send_message(message, self)def receive(self, message):print(f"ConcreteColleagueA received message: {message}")class ConcreteColleagueB(Colleague):def send(self, message):self.mediator.send_message(message, self)def receive(self, message):print(f"ConcreteColleagueB received message: {message}")class Mediator:def __init__(self):self.colleagues = []def add_colleague(self, colleague):self.colleagues.append(colleague)def send_message(self, message, sender):for colleague in self.colleagues:if colleague != sender:colleague.receive(message)mediator = Mediator()
# 创建
colleague_a = ConcreteColleagueA(mediator)
colleague_b = ConcreteColleagueB(mediator)
# 注册
mediator.add_colleague(colleague_a)
mediator.add_colleague(colleague_b)
# 通过中介对象
colleague_a.send("Hello, colleague B")
colleague_b.send("Hi, colleague A")
"""
ConcreteColleagueB received message: Hello, colleague B
ConcreteColleagueA received message: Hi, colleague A
"""

解释器模式(Interpreter Pattern)

定义了一个语言的文法,且建立一个解释器来解释该语言中的句子。这个模式常用于需对一些特定语言进行处理或解析的场景。
from abc import ABC, abstractmethodclass Expression(ABC):@abstractmethoddef interpret(self):passclass NumberExpression(Expression):def __init__(self, number):self.number = numberdef interpret(self):return self.numberclass PlusExpression(Expression):def __init__(self, expression1, expression2):self.expression1 = expression1self.expression2 = expression2def interpret(self):return self.expression1.interpret() + self.expression2.interpret()class MinusExpression(Expression):def __init__(self, expression1, expression2):self.expression1 = expression1self.expression2 = expression2def interpret(self):return self.expression1.interpret() - self.expression2.interpret()expression = MinusExpression(PlusExpression(NumberExpression(5), NumberExpression(3)),NumberExpression(2)
)print(expression.interpret())  # 6

相关文章:

设计模式-行为型模式(模板方法、策略、观察者、迭代器、责任链、命令、状态、备忘录、访问者、中介者、解释器)

行为型模式&#xff1a;专注于对象之间的 协作 及如何通过彼此之间的交互来完成任务。行为型模式通常集中在描述对象之间的 责任 分配和 通信 机制&#xff0c;并提供了一些优雅解决特定问题的方案。 模板方法模式(Template Method Pattern)策略模式(Strategy Pattern)观察者模…...

全面探讨 Spring Boot 的自动装配机制

Spring Boot 是一个基于 Spring 框架的快速开发脚手架&#xff0c;它通过自动配置机制帮助我们快速搭建应用程序&#xff0c;从而减少了我们的配置量和开发成本。自动装配是 Spring Boot 的核心特点之一&#xff0c;它可以减少项目的依赖&#xff0c;简化配置文件&#xff0c;提…...

河道水位监测:河道水位监测用什么设备

中国地形复杂&#xff0c;气候多样&#xff0c;导致水资源分布不均&#xff0c;洪涝和干旱等问题时有发生。同时&#xff0c;人类活动也对水资源造成了很大压力&#xff0c;工业和农业用水增加&#xff0c;河道水位下降&#xff0c;生态环境受到威胁。因此&#xff0c;对河道水…...

嵌入式系统中u-boot和bootloader到底有什么区别

嵌入式软件工程师都听说过 u-boot 和 bootloader&#xff0c;但很多工程师依然不知道他们到底是啥。 今天就来简单讲讲 u-boot 和 bootloader 的内容以及区别。 Bootloader Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道&#xff0c;windows开机时会首先加载…...

实验14:20211030 1+X 中级实操考试(id:2498)

实验14&#xff1a;20211030 1X 中级实操考试&#xff08;id&#xff1a;2498&#xff09; 一、项目背景说明二、表结构三、步骤【5 分】步骤 1&#xff1a;项目准备【5 分】步骤 2&#xff1a;完成实体类 Member【10 分】步骤 3&#xff1a;完成实体类 Goods【10 分】步骤 4&a…...

(字符串 ) 剑指 Offer 58 - II. 左旋转字符串 ——【Leetcode每日一题】

❓剑指 Offer 58 - II. 左旋转字符串 难度&#xff1a;简单 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如&#xff0c;输入字符串"abcdefg"和数字2&#xff0c;该函数将返回左旋转两位得到的…...

EPICS编程

提纲 1&#xff09; 为什么在EPICS上编程 2&#xff09;构建系统特性&#xff1a;假设基本理解Unix Make 3&#xff09;在libCom中可用的工具 1&#xff09; 为什么在EPICS上编程 1、社区标准&#xff1a;EPICS合作者知道和明白EPICS结构 2、在很多操作系统之间代码移值性…...

17:00面试,还没10分钟就出来了,问的实在是太...

从外包出来&#xff0c;没想到死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…...

docker都有那些工具,及工具面试题

docker介绍 Docker 是一种开源的容器化平台&#xff0c;可以帮助开发者将应用程序和依赖项打包到轻量级的容器中&#xff0c;然后部署到任何基于 Linux 的操作系统中。使用 Docker 可以大大简化开发、部署和管理应用程序的过程&#xff0c;使其更加快速、灵活和可靠。 Docker…...

LAMP网站应用架构

LAMP 一、LAMP概述1、各组件的主要作用2、构建LAMP各组件的安装顺序 二、编译安装Apache httpd服务1、关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下2.安装环境依赖包3.配置软件模块4.编译及安装5.优化配置文件路径&#xff0c;并把httpd服务的可执行程序文件放…...

C++虚函数virtual(动态多态)(纯虚函数)

怎么判断函数是虚函数还是普通函数&#xff1f; 用VS&#xff0c;在调用对象的方法的地方。。按altg &#xff0c;如果他跳转到正确的函数&#xff0c;那也就意味着他是编译时可以确定的。。。 但是如果他跳到了这个调用对象的基类的函数&#xff0c;那么也就意味着他是一个运行…...

【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; Java | 从入门到入坟 专属&#xff1a;六月一日 | 儿童节 Java 接口 接口简介 &#x1f383;接口的定义 &#x1f9e7;接口实现类名定义 &#x1f381;接口实现类小案例 &#x1f388;后话 &#x1f3b0; 接口简介 &…...

解决Vmware上的kali找不到virtualbox上的靶机的问题

解决kali找不到靶场ip问题的完整方法 1.配置靶机2.配置kali的虚拟网络3.配置kali中的eth0网络 1.配置靶机 靶机部署在Virtualbox上对其进行网络配置&#xff0c;选择连接方式为仅主机&#xff08;Host-Only&#xff09;网络。 2.配置kali的虚拟网络 在编辑中选择虚拟网络配…...

查看MySQL服务器是否启用了SSL连接,并且查看ssl证书是否存在

文章目录 一、查看MySQL服务器是否启用了SSL连接 1.登录MySQL服务器 2.查看SSL配置 二、查看证书是否存在 前言 查看MySQL服务器是否启用了SSL连接&#xff0c;并且查看ssl证书是否存在 一、查看MySQL服务器是否启用了SSL连接 1.登录MySQL服务器 在Linux终端中&#xf…...

华为OD机试真题 Java 实现【表示数字】【牛客练习题】

一、题目描述 将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。 数据范围:字符串长度满足1≤n≤100 。 二、输入描述 输入一个字符串。 三、输出描述 字符中所有出现的数字前后加上符号“*”,其他字符保持不变。 四、解题思路…...

使用Python进行接口性能测试:从入门到高级

前言&#xff1a; 在今天的网络世界中&#xff0c;接口性能测试越来越重要。良好的接口性能可以确保我们的应用程序可以在各种网络条件下&#xff0c;保持流畅、稳定和高效。Python&#xff0c;作为一种广泛使用的编程语言&#xff0c;为进行接口性能测试提供了强大而灵活的工…...

sed编辑器

文章目录 一.sed命令基础1.sed概念2.sed的工作流程3.命令格式4.sed命令的常用选项5.sed命令的操作符 二.sed命令的打印功能1.打印文本文件内容1.1 格式1.2 默认打印方式 2.指定行打印2.1 指定行号打印2.2 只打印文件的行数2.3 即打印文件的行号也打印文件的内容2.4 即显示行也显…...

深入理解深度学习——正则化(Regularization):稀疏表示

分类目录&#xff1a;《深入理解深度学习》总目录 另一种策略是惩罚神经网络中的激活单元&#xff0c;稀疏化激活单元。这种策略间接地对模型参数施加了复杂惩罚。我们已经在《深入理解深度学习——正则化&#xff08;Regularization&#xff09;&#xff1a;参数范数惩罚》中讨…...

【Android】分别用JAVA和Kotlin实现横向扫描的动画效果

Android 横向扫描的动画可以通过使用 ViewPropertyAnimator 和 ObjectAnimator 来实现。 首先&#xff0c;在 XML 布局文件中创建一个 ImageView&#xff0c;并设置其宽度为 0dp&#xff0c;高度为 match_parent。然后&#xff0c;创建一个横向的渐变色 Drawable&#xff0c;并…...

长尾词挖掘,如何选择精准的长尾词优化?

长尾词的挖掘也是一门大学问&#xff0c;它存在多种不同的方法。最常用的方法是把关键词直接放搜索引擎的搜索框搜索和使用长尾词挖掘工具这两种。 以运动水壶为例。 关键词直接放搜索引擎的搜索框搜索&#xff0c;结果如下&#xff1a; 使用长尾词挖掘工具&#xff0c;…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...