理解 Python 中的闭包

理解 python 中的闭包

python中,闭包是一个重要的概念,它允许函数“记住”它被创建的环境,即使在函数完成执行之后也是如此。闭包允许我们在不使用全局变量或类实例的情况下实现有状态函数。

在这篇文章中,我们将通过使用 nonlocal 关键字实现一个简单的计数器来探索闭包。让我们深入探讨一下!

什么是闭包?

当嵌套函数引用其封闭范围中的变量时,就会发生闭包,从而允许它即使在封闭函数完成执行后仍保留对这些变量的访问权限。当您想要将状态或行为封装在函数中时,闭包特别有用。

非本地关键字

在python中,我们使用nonlocal关键字来修改最近封闭范围内的非全局变量。如果没有 nonlocal 关键字,内部函数就无法修改其封闭范围内的变量;相反,它会创建一个新的局部变量。 nonlocal 关键字通过告诉 python 我们想要使用封闭范围内的变量来解决这个问题。

立即学习“Python免费学习笔记(深入)”;

实现带有闭包的计数器

让我们创建一个简单的计数器函数,它使用闭包来跟踪计数,而不依赖于全局变量或类。

第 1 步:定义 make_counter 函数

我们将创建一个名为 make_counter 的函数,它将返回一个内部函数增量。内部函数每次调用都会增加一个计数变量。

步骤2:使用nonlocal修改count变量

为了确保increment函数修改make_counter函数作用域中定义的count变量,我们将使用nonlocal关键字。

这是实现:

27764714​​7929

第三步:使用计数器

现在我们有了 make_counter 函数,我们可以创建一个计数器的实例并多次调用它来查看计数器增量。

counter = make_counter()print(counter())  # Output: 1print(counter())  # Output: 2print(counter())  # Output: 3print(counter())  # Output: 4print(counter())  # Output: 5

解释

count 变量在 make_counter 函数中初始化为 0。每次我们调用increment函数(由make_counter返回)时,它都会使用nonlocal关键字修改封闭范围内的count变量。由于闭包属性,即使在 make_counter 函数完成执行后,increment 函数仍保留对 count 的访问。

为什么使用闭包?

闭包提供了一种强大且优雅的方式来将状态封装在函数中。它们在以下情况下特别有用:

您想要跟踪一个值而不将其暴露给全局范围。您需要一个函数来在多次调用中记住其先前的状态(就像我们的反例)。您不想使用全局变量或创建类来进行简单的状态管理。

闭包可用于更高级的用例,例如装饰器、记忆和回调。

以上就是理解 Python 中的闭包的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1354511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 18:36:09
下一篇 2025年12月13日 18:36:16

相关推荐

  • 如何使用 Python 创建带有时间和日期的动态壁纸

    如果您曾经想要一张能根据当前时间和日期自动更新的壁纸,那么本教程适合您。我们将使用 python 和一些库(如 pil (pillow))生成图像,添加带有时间和日期的动态文本,然后将此图像设置为 windows 上的壁纸。 我们需要什么? 已安装 python:如果您尚未安装 python,可以从…

    好文分享 2025年12月13日
    000
  • 配置 Django 项目以将敏感数据存储在 YAML 文件中

    .py 文件中硬编码令牌、数据库凭据和其他敏感数据并不安全。很多人使用django-environ库,但我认为它不方便。因此,我使用 yaml 文件来存储敏感数据,并使用 pyyaml 库来读取它们的数据。 创建项目文件夹: mkdir myproject 切换创建的文件夹: cd myprojec…

    2025年12月13日
    000
  • Jinbase – 多模型事务嵌入式数据库

    嗨,开发者! 我是 Alex,一名技术爱好者。我很高兴向您展示 Jinbase,我的多模型事务嵌入式数据库。 大约一年前,我介绍了 Paradict,这是我对多格式流序列化的看法。鉴于其可读性,Paradict 文本格式实际上是配置文件的一种有趣的数据格式。但是使用 Paradict 来管理配置文件…

    2025年12月13日
    000
  • Python – 级别:询问

    1 级任务 1) 华氏度到摄氏度转换 f=int(input(“enter the no. “))c=5/9*(f-32)print(“fahrenheit to celsius”,round(c)) 输出: enter the no. 108fahrenheit to celsius 42 2) …

    2025年12月13日
    000
  • Python 初学者指南:快速教程 – 2

    python 是最流行的编程语言之一,以其简单性和多功能性而闻名。无论您是编程新手还是希望为您的项目选择 python,本教程都将指导您完成基础知识。 1.什么是python? python 是一种高级解释型编程语言,强调可读性和效率。它广泛应用于网页开发、数据分析、人工智能、科学计算等领域。 2.…

    2025年12月13日
    000
  • 为您的 Python 项目设置 Conda 环境 – 1

    使用 conda 和requirements.txt 设置 python 项目 在处理 python 项目时,创建隔离的环境来管理依赖关系并避免冲突至关重要。本指南将帮助您安装 anaconda、解决常见问题并为您的项目设置虚拟环境。 1.安装 anaconda(在根终端) a) 按照本指南安装 a…

    2025年12月13日
    000
  • python怎么写一个简单的爬虫

    为了编写简单的 Python 爬虫,需要:导入库:BeautifulSoup4、requests、lxml发送 HTTP GET 请求解析 HTML 响应提取数据 Python 编写简单爬虫指南 为了编写一个简单的 Python 爬虫,你需要遵循以下步骤: 1. 选择合适的库 使用以下 Python…

    2025年12月13日
    000
  • python爬虫中标签闭合了怎么办

    Python 爬虫中遇到标签闭合可使用以下方法处理:使用 BeautifulSoup 解析库,自动处理标签闭合。使用正则表达式查找标签内容,但需理解正则表达式语法。使用 HTML 解析器生成 DOM,通过 DOM 获取完整内容。 Python 爬虫中标签闭合了如何处理 在 Python 爬虫中,遇到…

    2025年12月13日
    000
  • 一点不会怎么做python爬虫

    入门 Python 爬虫的步骤:安装 Python 和库,并熟悉基础语法和模块。了解爬虫原理、HTTP 请求和响应、HTML 解析。使用 requests 发送 HTTP 请求,使用 BeautifulSoup 解析 HTML,提取数据并存储。处理复杂网站,使用无头浏览器、应对反爬虫措施。清理数据,…

    2025年12月13日
    000
  • python爬虫怎么传两个参数

    Python爬虫传递两个参数的方法是:命令行参数:在命令行中使用 -a 选项,语法:python crawler.py -a arg1=val1 -a arg2=val2。脚本参数:通过 sys.argv 获取命令行参数,语法:import sys;args = sys.argv[1:],再解析参数…

    2025年12月13日
    000
  • python做爬虫 怎么样效率最高

    高效爬虫使用 Python 的优化策略:并行化处理:使用多线程或多进程同时处理多个请求,并利用 asyncio 或 Tornado 实现非阻塞 I/O。缓存请求:存储爬取结果以避免重复爬取。限制请求速率:使用速率限制器控制爬取频率,避免触发网站反爬机制。针对性爬取:使用正则表达式或 CSS 选择器只…

    2025年12月13日
    000
  • python爬虫数据excel保存怎么弄

    使用 Python 爬虫将数据保存到 Excel 的步骤:安装 openpyxl 库。创建 Excel 工作簿和工作表。循环写入数据到单元格中。保存工作簿为 Excel 文件。 如何使用 Python 爬虫将数据保存到 Excel 方法: 1. 安装相关库 pip install openpyxl …

    2025年12月13日
    000
  • python爬虫怎么点下一页

    使用Python爬虫点下一页的方法有两种:Selenium:使用Selenium自动浏览器操作,点击下一页按钮。Requests:发送HTTP请求提取下一页链接,继续爬取。 如何使用 Python 爬虫点下一页 方法一:Selenium Selenium 是一个流行的 Python 爬虫库,它允许你…

    2025年12月13日
    000
  • python爬虫换行符怎么处理

    Python处理换行符的方法有4种:直接移除换行符;替换换行符为指定字符;保留换行符原格式,使用splitlines()方法拆分为行列表;使用正则表达式处理换行符。 Python 爬虫如何处理换行符 在 Web 爬取中,换行符是一个常见的挑战,因为它会影响数据的解析和处理。Python 提供了多种方…

    2025年12月13日
    000
  • python爬虫怎么从接口拿东西

    通过使用编程语言和 HTTP 库,爬虫可以发送请求到提供 API 接口的网站,从而从响应中获取数据。详细步骤包括:确定 API 端点、建立 HTTP 请求、发送请求、处理响应和提取所需数据。 从接口获取数据的 Python 爬虫 如何从接口获取数据? 通过编程语言,爬虫可以发送请求到提供 API 接…

    2025年12月13日
    000
  • python爬虫怎么爬取动态页面

    Python 爬取动态页面的方法包括:Selenium:用于自动化 Web 浏览器,适合复杂的动态页面。Splash:基于 Chromium headless browser,通过 JavaScript API 处理动态页面。Puppeteer:无头 Chrome 浏览器,提供强大 API 控制浏览…

    2025年12月13日
    000
  • python爬虫url里面怎么写

    URL编写对于Python爬虫至关重要,其结构包括协议、主机名、路径、查询字符串和片段标识符。可以使用urllib.parse模块编写和解析URL,它提供urlparse()、urlunparse()、quote()和unquote()等函数。特殊字符需要编码,而查询字符串包含附加信息并以问号开头。…

    2025年12月13日
    000
  • 超越基础:掌握 Python 的隐藏功能以实现高效编码

    python 的简单性是其最大优点之一,使其成为初学者和专业人士的最爱。然而,除了基础知识之外,还有一个隐藏功能和强大工具的宝库,可以增强您的编码技能。掌握这些高级概念可以让你的代码更加高效、优雅、可维护。本文深入探讨了每个开发人员都应该知道的 python 鲜为人知的宝石。 1.用*和**解压py…

    2025年12月13日
    000
  • 剪掉多余的部分(大约)

    python 编程语言具有近似数据的能力。也就是说,科学地近似函数并将数字四舍五入为特定且精确的数字。 python 中的许多数学函数看起来简洁且符合人体工程学,例如范围、向量等。 随机函数允许您通过变量/数组的所有可能值运行算法。整数的随机数近似函数 (randint) 创建了代码工作的可移植性。…

    2025年12月13日
    000
  • 新博客系列:Python 人工智能基础知识

    欢迎来到我的新博客系列,我们将在机器学习的背景下探索 Python 的迷人世界。由于其简单性和提供的强大库,Python 已成为数据科学和机器学习领域的基石。无论您是初学者还是希望提高自己的技能,本系列都将指导您了解 Python 的基础知识,为您的机器学习之旅奠定坚实的基础。 系列路线图 以下是您…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信