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

闭包和装饰器

什么是闭包

闭包(Closure)是 Python 中一个非常重要的概念,它是一种特殊的函数对象,通常用于封装和延迟计算某些值。以下是闭包的详细定义和解释:

1.闭包的定义
闭包是指一个函数对象,它不仅包含函数的代码,还绑定了函数外部的自由变量(free variable)。自由变量是指在函数内部被引用,但不是函数参数的变量。闭包允许函数访问和操作这些自由变量,即使这些变量的作用域已经结束。

2.闭包的构成要素
一个闭包通常由以下三个部分组成:

• 外部函数:定义了自由变量的函数。

• 内部函数:在外部函数内部定义的函数,它引用了外部函数的自由变量。

• 自由变量:在内部函数中被引用,但不是内部函数参数的变量。

3.闭包的创建
闭包是通过返回内部函数来创建的。当内部函数被返回时,它会记住外部函数的自由变量,即使外部函数的作用域已经结束。这种机制使得闭包可以“记住”外部函数的上下文。

4.闭包的作用
闭包的主要作用是封装状态,允许函数在不使用全局变量的情况下,保存和操作一些数据。闭包可以用于实现装饰器、延迟计算、回调函数等功能。

5.闭包的示例
以下是一个简单的闭包示例,用于说明闭包的创建和使用:

def outer_function(x):def inner_function(y):return x + y  # x 是自由变量return inner_function  # 返回内部函数,创建闭包# 创建闭包
closure = outer_function(10)  # x 被绑定为 10# 调用闭包
result = closure(5)  # 调用 inner_function,y 为 5,结果为 15
print(result)  # 输出 15

在这个例子中:

outer_function是外部函数,它定义了一个自由变量x

inner_function是内部函数,它引用了自由变量x

• 当outer_function被调用时,它返回了inner_function,此时inner_function记住了x的值(10),即使outer_function的作用域已经结束。

closure是一个闭包对象,它绑定了自由变量x的值(10),并可以被多次调用。

6.闭包的特性

• 自由变量的绑定:闭包会记住外部函数的自由变量的值,即使外部函数的作用域已经结束。

• 延迟计算:闭包允许延迟计算某些值,直到内部函数被调用。

• 封装性:闭包可以封装状态,避免使用全局变量,使代码更加模块化。

7.闭包的应用场景

• 装饰器:Python 中的装饰器本质上是闭包,用于在不修改原函数的情况下扩展函数的功能。

• 回调函数:闭包可以作为回调函数,保存一些上下文信息。

• 延迟计算:闭包可以用于延迟计算某些值,直到需要时才计算。

• 封装状态:闭包可以封装一些状态信息,避免使用全局变量。

8.注意事项

• 内存占用:闭包会占用一定的内存,因为它们需要保存自由变量的值。

• 变量作用域:自由变量的值是绑定在闭包创建时的值,而不是调用时的值。

• 不可变变量:如果自由变量是不可变类型(如整数、字符串等),它们的值在闭包中是固定的;如果是可变类型(如列表、字典等),它们的值可以在闭包中被修改。

全局变量使用

在 Python 中,nonlocal是一个关键字,用于在嵌套函数中修改外部函数(但不是全局作用域)中的变量。它是 Python 3 中引入的一个特性,用于解决嵌套函数中变量作用域的问题。

1.nonlocal的作用

在嵌套函数中,如果内部函数需要修改外部函数中的变量,而这个变量既不是全局变量,也不是内部函数的局部变量,那么就需要使用nonlocal关键字。nonlocal告诉 Python,变量来自外层作用域(但不是全局作用域),从而允许内部函数修改这个变量。

2.使用场景

假设有一个外部函数和一个内部函数,外部函数中定义了一个变量,内部函数需要修改这个变量。如果没有nonlocal,Python 会认为内部函数中对变量的赋值是创建了一个新的局部变量,而不是修改外部函数中的变量。使用nonlocal可以明确告诉 Python,要修改的是外部函数中的变量。

3.示例

以下是一个使用nonlocal的示例:

def outer_function():x = 10  # 外部函数中的变量def inner_function():nonlocal x  # 使用 nonlocal 声明 xx = 20  # 修改外部函数中的 xinner_function()  # 调用内部函数print(x)  # 输出修改后的 xouter_function()

输出结果为:

20

在这个例子中:

xouter_function中的局部变量。

inner_function是嵌套在outer_function内部的函数。

• 如果不使用nonlocalinner_function中的x = 20会创建一个新的局部变量x,而不会修改outer_function中的x

• 使用nonlocal x后,inner_function中的x = 20会修改outer_function中的x

4.nonlocal的规则

nonlocal只能用于嵌套函数中,不能用于全局作用域。

nonlocal声明的变量必须在外部作用域中已经存在,不能在内部函数中直接创建一个nonlocal变量。

nonlocal只能用于修改变量的值,不能用于重新绑定变量到一个新的对象。

5.示例:嵌套多层函数

nonlocal可以用于多层嵌套的函数中,但只能作用于直接外层的变量。例如:

def outer_function():x = 10def middle_function():def inner_function():nonlocal x  # 修改 outer_function 中的 xx = 20inner_function()middle_function()print(x)outer_function()

输出结果为:

20

在这个例子中,inner_function中的nonlocal x修改了outer_function中的x,而不是middle_function中的x

7.nonlocalglobal的区别

global用于声明全局变量,可以在函数内部修改全局作用域中的变量。

nonlocal用于声明嵌套函数中的变量,只能修改外层函数(非全局作用域)中的变量。

闭包的主要作用就是使用装饰器

装饰器(Decorator)是Python提供的一种语法糖,它允许你在不修改函数本身代码的情况下,增加函数的新功能。装饰器本质上是一个函数,它接收一个函数作为参数并返回一个新的函数。

装饰器的功能特点:

  1. 不修改已有函数的源代码:装饰器不会改变被装饰函数的代码。

  2. 不修改已有函数的调用方式:调用被装饰的函数时,不需要改变调用方式。

  3. 给已有函数增加额外的功能:装饰器可以在不修改函数代码的情况下,给函数增加新的功能。

装饰器的使用:
由于装饰器本质上就是一个闭包函数,所以在使用自定义装饰器之前,需要先定义一个用来做装饰器的闭包。闭包的外部函数名,就作为装饰器名使用。

在图中,展示了一个简单的装饰器示例:

import timedef count_time(func):def inner():start_time = time.time()func()stop_time = time.time()print(f"Function {func.__name__} took {stop_time - start_time} seconds to execute.")return inner# 使用装饰器
@count_time
def example_function():time.sleep(2)print("Function is running.")

在这个例子中:

count_time是一个装饰器函数,它接收一个函数func作为参数,并返回一个新的函数inner

inner函数记录了func函数的执行时间,并在执行前后打印相关信息。

@count_time是装饰器的使用方式,它将example_function函数作为参数传递给count_time装饰器。

通过这种方式,example_function在执行时会自动记录并打印其执行时间,而不需要修改example_function的代码。这就是装饰器的强大之处,它能够在不改变函数代码的情况下,给函数增加新的功能。

可变参数

在Python中,如果你需要定义一个函数来处理可变数量的参数,你可以使用*args**kwargs来实现。这两种方法允许你的函数接收任意数量的位置参数和关键字参数。

使用*args处理可变数量的位置参数

*args允许你将任意数量的位置参数传递给函数,这些参数在函数内部作为一个元组处理。

def fun(*args):for arg in args:print(arg)fun(1, 2, 3, 4, 5)  # 输出: 1 2 3 4 5

在这个例子中,fun函数可以接收任意数量的位置参数,并将它们打印出来。

使用**kwargs处理可变数量的关键字参数

**kwargs允许你将任意数量的关键字参数传递给函数,这些参数在函数内部作为一个字典处理。

def fun(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")fun(name="Alice", age=25, city="New York")  # 输出: name: Alice age: 25 city: New York

在这个例子中,fun函数可以接收任意数量的关键字参数,并将它们打印出来。

结合使用*args**kwargs

你可以在同一个函数中同时使用*args**kwargs,以处理任意数量的位置参数和关键字参数。

def fun(*args, **kwargs):for arg in args:print(arg)for key, value in kwargs.items():print(f"{key}: {value}")fun(1, 2, 3, name="Alice", age=25)  # 输出: 1 2 3 name: Alice age: 25

在这个例子中,fun函数可以同时接收任意数量的位置参数和关键字参数。

装饰器中使用*args**kwargs

当你在装饰器中处理被装饰函数时,如果被装饰函数可能接收可变数量的参数,你需要在装饰器的包装函数中传递这些参数。

import timedef count_time(func):def wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")return resultreturn wrapper@count_time
def greet(name, *args, **kwargs):print(f"Hello, {name}!")for arg in args:print(arg)for key, value in kwargs.items():print(f"{key}: {value}")greet("Alice", 25, city="New York")  # 输出: Hello, Alice! 25 city: New York

在这个例子中,greet函数可以接收一个位置参数name,任意数量的位置参数*args,以及任意数量的关键字参数**kwargs。装饰器count_time通过在包装函数wrapper中使用*args**kwargs,确保了这些参数能够正确地传递给greet函数。

相关文章:

闭包和装饰器

什么是闭包 闭包(Closure)是 Python 中一个非常重要的概念,它是一种特殊的函数对象,通常用于封装和延迟计算某些值。以下是闭包的详细定义和解释: 1.闭包的定义 闭包是指一个函数对象,它不仅包含函数的代…...

电脑显示器选购

显示器分类 按尺寸大小 一般显示器屏幕有24寸、27寸、32寸等 按技术分类 LCD显示器 使用液晶分子作为主要材料,以液晶为显示/控制模块制造而成的显示设备。液晶显示器中的液晶体在工作时不发光,而是控制外部的光通过量。当外部光线通过液晶分子时&a…...

论伺服电机在轨道式巡检机器人中的优势及应用实践​

一、引言​ 1.1 研究背景与意义​ 在现代工业生产、电力系统、轨道交通等诸多领域,保障设施设备的安全稳定运行至关重要。轨道式巡检机器人作为一种高效、智能的巡检工具,正逐渐在这些领域崭露头角。它能够沿着预设轨道,对目标区域进行全方位…...

室内指路机器人是否支持与第三方软件对接?

嘿,你知道吗?叁仟室内指路机器人可有个超厉害的技能,那就是能和第三方软件 “手牵手” 哦,接下来就带你一探究竟! 从技术魔法角度看哈:好多室内指路机器人都像拥有超能力的小魔法师,采用开放式…...

Docker 命令大全:从入门到精通

一、容器生命周期管理 1. 容器操作基础 # 运行容器 docker run -d --name my_nginx -p 8080:80 nginx:latest# 启动/停止容器 docker start my_nginx docker stop my_nginx# 重启容器 docker restart my_nginx# 删除容器 docker rm my_nginx 2. 容器状态管理 # 查看运行中的…...

【HarmonyOS Next之旅】DevEco Studio使用指南(十一)

目录 1 -> 代码实时检查 2 -> 代码快速修复 3 -> C快速修复使用演示 3.1 -> 填充switch语句 3.2 -> 使用auto替换类型 3.3 -> 用?:三元操作符替换if-else 3.4 -> 从使用处生成构造函数 3.5 -> 将变量拆分为声明和赋值 1…...

【中间件】使用ElasticSearch提供的RestClientAPI操作ES

一、简介 ElasticSearch提供了RestClient来操作ES&#xff0c;包括对数据的增删改查&#xff0c;可参照官方文档&#xff1a;Java High Level REST Client 二、使用步骤&#xff1a; 可参照官方文档操作 导包 <dependency><groupId>org.elasticsearch.client<…...

数字电子技术基础(三十九)——显示译码器

目录 1 显示译码器 1.1 显示译码器简介 1.2 七段显示译码器和八段显示译码器 1.3 BCD-七段显示译码器 1.4 多位显示译码器 1 显示译码器 1.1 显示译码器简介 显示译码器是一种数字电路&#xff0c;是将二进制转换为驱动显示设备所需要的信号&#xff0c;核心是将编码数据…...

Java学习总结-多线程-三种创建方法

什么是线程&#xff1f; 线程&#xff08;Thread&#xff09;是程序内部的一条执行流程。 程序如果只有一条执行流程&#xff0c;那这个程序就是单线程程序。 什么是多线程&#xff1f; 多线程是指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行…...

sqli-labs靶场 less 7

文章目录 sqli-labs靶场less 7 mysql文件上传拿web shell sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、…...

大模型最新面试题系列:模型部署(二)

一、如何通过unsloth的批处理&#xff08;Batching&#xff09;功能提升推理效率&#xff1f; Unsloth的批处理&#xff08;Batching&#xff09;功能通过整合硬件加速、内存优化和动态调度技术&#xff0c;显著提升大模型推理效率。以下是具体实现方法和实际应用场景的深度解…...

Python助力去中心化云计算:构建分布式计算的未来

Python助力去中心化云计算:构建分布式计算的未来 随着区块链技术和Web 3.0生态的兴起,去中心化云计算正逐步成为主流。它不仅颠覆了传统集中式云计算的架构,还为数据安全、隐私保护以及资源分配带来了新的可能性。在这一领域,Python因其简洁易用、社区庞大以及强大的工具链…...

HCIP【路由过滤技术(详解)】

目录 1 简介 2 路由过滤方法 3 路由过滤工具 3.1 静默接口 3.2 ACL 3.3 地址前缀列表 3.4 filter-policy 3.4.1 filter-policy过滤接收路由&#xff08;以RIP为例&#xff09; 3.4.2 filter-policy过滤接收路由&#xff08;以OSPF为例&#xff09; 1 简介 路由过滤技术…...

LeetCode Hot100 刷题笔记(3)—— 链表

目录 前言 1. 相交链表 2. 反转链表 3. 回文链表 4. 环形链表 5. 环形链表 II 6. 合并两个有序链表 7. 两数相加 8. 删除链表的倒数第 N 个结点 9. 两两交换链表中的节点 10. K 个一组翻转链表 11. 随机链表的复制 12. 排序链表 13. 合并 K 个升序链表 14. LRU 缓存 前言 一、…...

商品计费打折实现效果

1.创建php站点 2.创建php文件 3.执行php文件打开浏览器地址栏输入http://localhost/dophp/price.php页面如图所示&#xff1a; 4.表单输入&#xff0c;创建php文件price_form.php 运行效果为...

游戏引擎学习第207天

回顾并为今天的内容定下基调 我们正在继续上一次的任务&#xff0c;目的是构建一个基本的元编程系统&#xff0c;用来自动处理结构体信息&#xff0c;减少手动维护的代码量。具体来说&#xff0c;我们写了一个简单的预处理器&#xff0c;它可以解析代码中的结构体定义&#xf…...

Linux内核页表缓存(TLB)与巨型页

一、页表缓存&#xff08;TLB&#xff09; 处理器厂商在内存管理单元 (MMU) 里增加一个 TLB (Translation Lookaside Buffer) 的高速缓存&#xff0c;TLB 直译为转译后备缓冲器&#xff0c;也被翻译为页表缓存。 TLB 为 CPU 的一种缓存&#xff0c;由存储器管理单元用于…...

Web3(阶段一:入门)——默克尔树

什么是默克尔树 默克尔树&#xff08;Merkle Tree&#xff09;&#xff0c;又称哈希树&#xff0c;是一种基于哈希算法的数据结构&#xff0c;用于高效验证数据完整性。其核心思想是将数据分块并逐层哈希&#xff0c;最终生成唯一的根哈希值。 核心特点&#xff1a; 结构分层…...

Qt Quick 与 Qt 版本匹配关系

一、核心版本对应关系 Qt 版本Qt Quick 版本重要特性Qt 5.0Qt Quick 2.0首次引入基于Scene Graph的架构Qt 5.12Qt Quick 2.12长期支持版(LTS),新增粒子系统增强Qt 5.15Qt Quick 2.15最后5.x LTS,改进3D集成Qt 6.0Qt Quick 6.0完全重写渲染架构,支持VulkanQt 6.2Qt Quick 6.2…...

DefaultListableBeanFactory

文章目录 DefaultListableBeanFactory介绍继承关系源码码解析属性成员getbean方法setAutowireCandidateResolver方法resolveDependency方法doResolveDependency方法findAutowireCandidates 方法determineAutowireCandidate 方法 DefaultListableBeanFactory介绍 BeanFactory是…...

软件工程面试题(三十二)

1、java程序每天12点打印”hello” public static void main(String[] args) {Date date = new Date(); System.out.println(date.getHours()); while (true) {while (date.getHours() == 12) {if (date.getMinutes() == 0) {if (date.getSeconds() == 0) {System.out.print…...

高频面试题(含笔试高频算法整理)基本总结回顾66

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

生成式人工智能(AIGC):内容创作的新引擎与新挑战

在数字化时代&#xff0c;内容创作的需求呈爆炸式增长。无论是社交媒体、新闻媒体、广告营销还是娱乐行业&#xff0c;都急需大量高质量的文本、图像、音频和视频内容。然而&#xff0c;传统的内容创作方式面临着效率低下、成本高昂、创意枯竭等问题。生成式人工智能&#xff0…...

Java 大视界 -- 基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用进展(176)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

react和vue在开发使用的语法上面有什么区别?

React和Vue在开发使用的语法上有诸多区别&#xff0c;下面从组件定义、数据绑定、事件处理、生命周期钩子等方面详细阐述&#xff1a; 1. 组件定义 React&#xff1a; 函数组件是React推荐的组件定义方式&#xff0c;它本质上是一个JavaScript函数&#xff0c;返回JSX元素。类…...

ReFormX:现代化的 React 表单解决方案 - 深度解析与最佳实践

ReFormX文档 表单开发一直是前端工作中最繁琐却又最常见的任务之一。从简单的登录表单到复杂的多步骤配置页面&#xff0c;开发者往往需要编写大量重复代码&#xff0c;处理繁琐的状态管理、数据验证和联动逻辑。ReFormX 应运而生&#xff0c;它不仅是一个表单组件库&#xff…...

STM32单片机入门学习——第19节: [6-7]TIM编码器接口

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.06 STM32开发板学习——第19节: [6-7]TIM编码器接口 前言开发板说明引用解答和科普一…...

Spring 中的 bean 生命周期

&#x1f331; 一、什么是 Bean 生命周期&#xff1f; 在 Spring 容器中&#xff0c;一个 Bean 从“创建 → 初始化 → 使用 → 销毁”&#xff0c;经历了完整的生命周期。 Spring 提供了 多个扩展点 让你可以在这些阶段做事情&#xff0c;比如注入资源、日志记录、连接资源、清…...

Kafka 在 k8s 中的消费者实例

每个 Pod&#xff08;在 K8s 中运行的消费者实例&#xff09;都会作为一个独立的消费者加入到 Kafka 消费者组中。 如果只是将消费者代码在 K8s 中复制多个实例&#xff08;例如通过增加副本数&#xff09;&#xff0c;每个实例都会作为一个独立的消费者加入到 Kafka 消费者组…...

野草云防火墙风险分析及 Docker 使用注意事项

在实际使用野草云服务器部署 Docker 服务过程中&#xff0c;我发现了一个非常容易被忽视但极具风险的安全问题——野草云的防火墙逻辑与 Docker 默认行为之间存在冲突&#xff0c;如果配置不当&#xff0c;可能会导致容器服务被意外暴露在公网&#xff0c;甚至绕过你设置的“拒…...

C++中高精度运算问题

前言&#xff1a;在备赛蓝桥杯时&#xff0c;遇到C处理数值较大的浮点数问题&#xff0c;特此记录一下。 C 的 std::string 类使用动态内存分配&#xff0c;其长度可以根据需要动态增加或减少&#xff0c;自动调整内存大小以适应字符串内容的变化。当字符串长度超过当前分配的…...

开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法

智能提示 为要绑定Lua的蓝图创建模板文件&#xff0c;这会在Content/Script下生成lua文件 然后点击生成智能代码提示&#xff0c;这会在Plugins/Unlua/Intermediate/生成Intenllisense文件夹 打开VSCode,点击文件->将工作区另存为。生成一个空工作区&#xff0c;放置在工程…...

前端快速入门学习4——CSS盒子模型、浮动、定位

一、盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;边距&#xff0c;边框&#xff0c;填充&#xff0c…...

在 ASP.NET Web Forms 项目中,编译后可能找不到 `Login.aspx.cs` 的源码文件的原因?

在 ASP.NET Web Forms 项目中&#xff0c;确实存在一种情况&#xff1a;编译后可能找不到 Login.aspx.cs 的源码文件。以下是对此现象的详细分析和解释&#xff1a; 1. 已知信息 您提供的 Web.config 文件显示这是一个 ASP.NET Web Forms 项目。在 ASP.NET 中&#xff0c;.asp…...

centos7 yum install docker 安装错误

1、错误信息&#xff1a; [rootlocalhost atguigu]# yum install docker 已加载插件&#xff1a;fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http:…...

spring mvc异步请求 sse 大文件下载 断点续传下载Range

学习连接 异步Servlet3.0 Spring Boot 处理异步请求&#xff08;DeferredResult 基础案例、DeferredResult 超时案例、DeferredResult 扩展案例、DeferredResult 方法汇总&#xff09; spring.io mvc Asynchronous Requests 官网文档 spring.io webflux&webclient官网文…...

Java项目集成大模型(通译千问)

1&#xff1a;打开阿里云搜索 通义大模型&#xff0c;然后点击丰富开发API接口。 2&#xff1a;可以看到有openAi和DashScope两种模式&#xff0c;我们这次采用DashScope方法&#xff0c;点击DashScope 3&#xff1a;点击获取Apikey 然后点击 前往我得Api-key跳转到控制台&…...

Lisp语言的安全协议

Lisp语言与安全协议的结合 引言 在信息社会的今天&#xff0c;数据的安全性和隐私保护愈发重要。随着网络攻击手段的不断演进&#xff0c;各种安全协议相继被提出与实现。与此同时&#xff0c;Lisp作为一种古老且灵活的计算机编程语言&#xff0c;虽然并不是主流的系统编程语…...

【图像处理基石】什么是自动曝光(AE)?

1. 什么是自动曝光&#xff08;AE&#xff09;&#xff1f; 自动曝光&#xff08;Auto Exposure, AE&#xff09;是一种通过调整相机参数&#xff08;如曝光时间、增益、光圈等&#xff09;使图像亮度达到目标值的技术。其核心是通过实时分析图像亮度&#xff0c;动态优化参数…...

清明假期间

1.思维导图 2.90题 3. #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>using namespace std;class Weapon;class Hero{ private:int hp;…...

el-tabs添加按钮增加点击禁止样式

前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮&#xff0c;没有点击样式&#xff0c;用户感知不明显没有限制最大的tab添加数量&#xff0c;可以无限添加 调整目标&代码编写 调整目标…...

Elasticsearch DSL 中的 aggs 聚合

一、聚合的概述 Elasticsearch 的 聚合&#xff08;Aggregations&#xff09; 功能用于对数据进行多维分析和统计&#xff0c;支持从简单的指标计算到复杂的分组分析。以下是聚合的基本结构&#xff1a; {"aggs": { // 也可以使用"agg…...

API调用类型全面指南:理解基础知识

在当今快速发展的数字化环境中&#xff0c;API&#xff08;应用程序编程接口&#xff09;是不同软件应用程序能够无缝通信的基石。无论是开发移动应用、集成第三方服务&#xff0c;还是构建强大的Web平台&#xff0c;理解各种API调用类型至关重要。那么&#xff0c;API调用到底…...

华东师范​地面机器人融合空中无人机视角的具身导航!KiteRunner:语言驱动的户外环境合作式局部-全局导航策略

作者&#xff1a;Shibo Huang 1 ^{1} 1, Chenfan Shi 1 ^{1} 1, Jian Yang 2 ^{2} 2, Hanlin Dong 1 ^{1} 1, Jinpeng Mi 3 ^{3} 3, Ke Li 2 ^{2} 2, Jianfeng Zhang 1 ^{1} 1, Miao Ding 4 ^{4} 4, Peidong Liang 5 ^{5} 5, Xiong You 2 ^{2} 2, Xian Wei 1 ^{1} 1单位&#x…...

Ansible(6)——管理变量

目录 一、Ansible 变量&#xff1a; 1、什么是变量&#xff1a; 2、变量可能包含的值&#xff1a; 3、变量命名&#xff1a; 4、定义变量&#xff1a; 二、Playbook 中的变量&#xff1a; 1、在 Playbook 中定义变量&#xff1a; &#xff08;1&#xff09;最简单的定…...

Git常用问题收集

gitignore 忽略文件夹 不生效 有时候我们接手别人的项目时&#xff0c;发现有的忽略不对想要修改&#xff0c;但发现修改忽略.gitignore后无效。原因是如果某些文件已经被纳入版本管理在.gitignore中忽略路径是不起作用的&#xff0c;这时候需要先清除本地缓存&#xff0c;然后…...

构建高效多标签选择组件:从设计到实现

在现代Web应用中&#xff0c;多标签选择功能已成为常见需求&#xff0c;特别是在内容分类、文章标签、用户兴趣选择等场景。本文将深入解析一个完整的多标签选择实现方案&#xff0c;涵盖交互设计、核心功能和优化技巧。 组件功能概述 这个多标签选择组件提供以下核心功能&am…...

4.1论文阅读

一&#xff1a;PhDnet&#xff1a;一种用于遥感图像的新型物理感知去雾网络&#xff08;A novel physic-aware dehazing network for remote sensing images&#xff09; 论文链接 只是粗略读了一下&#xff0c;关于遥感图像去雾&#xff0c;圆形U--net&#xff0c;加入了物理…...

【渗透测试】Vulnhub靶机-HA: Armour-详细通关教程

下载地址&#xff1a;https://www.vulnhub.com/entry/ha-armour,370/ 目录 前言 信息收集 tftp获取&#xff08;spiderman&#xff09; 查看.htpasswd&#xff08;ant-man&#xff09; ssh欢迎信息提示&#xff08;hulkbuster&#xff09; 反弹shell 提权&#xff08;i…...

Flask使用MySQL数据库通过Flask-SQLAlchemy 迁移数据库,实际更新文件,但是提示没有检测到数据更新。

本地写了一个model的用户类&#xff0c;数据库连接信息正确&#xff0c;执行下面2条命令进行数据库迁移。 flask db migrate 生成迁移文件 flask db upgrade 执行迁移文件的升级 发现执行完后&#xff1a;提示没有检测到数据的更新 PS C:\Users\mu> flask db migrate IN…...