Python 中的嵌套函数如何工作?2025 年 1 月 4 日 | 阅读 8 分钟 在 Python 中,函数被视为一等公民。在一种语言中,一等公民的待遇始终如一。数据结构、控制结构和参数传递是它们的一些可能用途。如果一种编程语言将函数视为一等公民,那么它就被称为支持一等函数。Python 支持一等函数的概念。 一等函数的特点包括:
内部函数内部函数,也称为嵌套函数,是在另一个函数内部声明的。外部作用域的变量可以被嵌套函数访问。内部函数的作用是保护它们免受函数外部发生的任何事情的影响。此过程的另一个名称是封装。 示例 输出 We are Learning Python from Javatpoint. 说明 此 Python 代码演示了外部函数中的内部函数。由外部函数定义的内部函数打印传递给外部函数的 txt 参数。sometxt 是包含文本“We are Learning Python from Javatpoint.”的变量,并作为参数传递给 outerFunc,然后 outerFunc 调用 innerFunc 并打印结果。这证明了 Python 嵌套函数的概念。 由于 innerFunc() 是在 outerFunc() 中定义的,因此它是一个内部函数。在调用 innerFunc() 之前,我们需要先调用 outerFunc()。之后,由于 innerFunc() 已在其内部定义,outerFunc() 将调用 innerFunc()。 为了使内部函数运行,必须调用外部函数。为此,请参阅下面的示例。 输出 This code will return nothing when executed. 说明 此 Python 代码定义的外部函数接受一个文本参数并在其中定义一个内部函数。内部函数打印外部函数的 text 变量。但是,当使用外部函数时,由于它是在没有任何打印语句或返回值的情况下调用的,因此不会产生明显的输出。 嵌套函数中的变量作用域变量的作用域是我们可以在其中找到它并根据需要访问它的地方。 虽然在函数内访问全局变量是众所周知的,但访问函数外部的变量又如何呢?以这个例子为例。 输出 We are Learning Python from Javatpoint. 说明 此 Python 代码中的 funcOne 函数有一个嵌套函数 funcTwo。词法作用域规则允许变量在 funcTwo 中可用,即使它是在 funcOne 中定义的。执行 funcOne 时,会调用 funcTwo 来打印 sometxt 的值,从而生成“We are Learning Python from Javatpoint.”的输出。 从上面的例子可以看出,它类似于使用函数检索全局变量。现在,假设您想修改外部函数的变量。 输出 I love Learning Python from Javatpoint. We are Learning Python from Javatpoint. 说明 此 Python 代码中的 funcOne 函数定义了一个名为 sometxt 的变量,其值为“We are Learning Python from Javatpoint.”。一个名为 funcTwo 的嵌套函数存在于 funcOne 中,它重新定义了 sometxt,意思是“I love Learning Python from Javatpoint.”。调用 funcTwo 时,会打印“I love Learning Python from Javatpoint.”作为 sometxt 的修改值。但是,当 funcOne 打印 sometxt 时,会打印“We are Learning Python from Javatpoint.”,指的是外部的 sometxt。正如可以观察到的,外部函数的变量值没有改变。 但是,外部函数的变量值是可以修改的。外部函数的变量可以通过多种不同的方式进行修改。 使用可迭代对象 输出 ['I love Learning Python from Javatpoint.'] ['I love Learning Python from Javatpoint.'] 说明 此 Python 代码中由 funcOne 函数初始化的列表 sometxt 只有一项,即“We are Learning Python from Javatpoint.”。一个嵌套函数 funcTwo 存在于 funcOne 中,它将 sometxt 的第一个元素更改为“I love Learning Python from Javatpoint.”。调用 funcTwo 时,会打印包含已修改元素的更新列表 sometxt。类似地,funcOne 在显示 sometxt 时显示更新列表中的已修改元素,这反映了 funcTwo 执行的更改。 使用 nonlocal 关键字 输出 I love Learning Python from Javatpoint. I love Learning Python from Javatpoint. 说明 此 Python 代码中的 sometxt 变量不是 funcTwo 函数的局部变量,而是属于外部函数 funcOne,如嵌套函数 funcTwo 中使用 nonlocal 关键字所示。这允许 funcTwo 修改 funcOne 定义的 sometxt 的值。当 funcTwo 将 sometxt 更改为“I love Learning Python from Javatpoint.”时,它还会影响 funcOne 中的 sometxt 值。结果,funcTwo 和 funcOne 都打印“I love Learning Python from Javatpoint.”作为 sometxt 的更新值。 值也可以被修改,如下面的示例所示。 输出 I love Learning Python from Javatpoint. I love Learning Python from Javatpoint. 说明 此 Python 代码中的 funcOne 函数定义了变量 funcOne.sometxt。使用点表示法(funcOne.sometxt)在嵌套函数 funcTwo 中访问并更改相同的变量 funcOne.s。因此,当 funcTwo 更改 funcOne.sometxt 为“I love Learning Python from Javatpoint.”时,funcOne 函数的 funcOne.sometxt 值也会被更新。因此,“I love Learning Python from Javatpoint.”是 funcOne 和 funcTwo 打印的 funcOne.sometxt 的更新值。 Python 闭包当周围作用域中的值不在内存中时,闭包就是一个保留其内存的函数对象。
filter_none。 输出 Welcome to Javatpoint Python Tutorial 说明 此 Python 代码中由 outer 函数声明的 inner 函数 innerFunc 打印在 outer 函数中定义的 sometxt 变量。在不调用内部函数(即不带括号)的情况下,外部函数返回内部函数。当调用 outerFunc 并将其分配给 funcOne 时,会捕获 sometxt 的值并创建闭包。稍后调用 funcOne 时,会生成“Welcome to Javatpoint Python Tutorial!”的输出。然后执行 innerFunc 函数,该函数仍然可以访问来自外部作用域的 text 变量。这说明了 Python 中的一个函数即使在外部函数完成运行后,仍然可以保留对其周围作用域中变量的访问。这称为闭包。
输出 6 9 5 10 说明 这个 Python 程序使用一个接受输入函数(add 或 sub)并输出一个名为 logFunction 的新函数的 logger 函数来演示闭包。在函数执行之前,logFunction 会记录函数名称及其参数。然后程序使用 logger 函数来构建加法和减法的 logger 例程(addLogger 和 subLogger)。这些 logger 函数演示了闭包的概念,其中内部函数(logFunction)通过在调用时记录函数名称和参数来保留对外部函数(logger)的变量(function_as_parameter, args)的访问。 |
简介:在本教程中,我们将学习 Python 中的 Pandas rolling。Python 是一种用于数据分析的实用语言,这主要归功于其出色的以数据为中心的 Python 包。Pandas 是一个软件包,可以轻松导入和分析文件。Pandas dataframe.rolling()……
阅读 4 分钟
计算机科学领域最基本的数据结构,不相交集,也称为 Union-Find 方法,可以有效地处理将组件分割成不相交集的问题。当处理涉及连接性和等价性关系的问题时,这种方法非常有用……
阅读 6 分钟
我们已经尝试并学习了在程序中定义和调用函数的不同方法。在本文中,我们将讨论 Python 中的可变长度参数是什么。这里我们将介绍两种类型 - 非关键字参数 (*args) 关键字参数 (**kwargs) 非关键字参数 (*args) 首先...
阅读 4 分钟
介绍 在本教程中,我们将学习关于。市场研究表明,由于技术的快速变化,数据科学工作正在增加。这里有超过 70,000 个开放的数据科学家/分析师职位,如果您想成为一名数据科学家,您将得到很好的照顾...
14 分钟阅读
在这个问题中,我们将给定一个有向图。我们的任务是判断有向图是否存在形成循环的路径。让我们看一个有向图的例子 输入:V = 8,E = 9 1 2 ...
阅读9分钟
等高线图简介 等高线图是数据科学中强大的可视化工具,用于在二维空间中表示三维数据。它们显示等值线(恒定值的线),有助于理解曲面的拓扑结构,在诸如...等领域特别有用。
阅读 3 分钟
干净的代码是指可供使用的代码,它不仅功能强大,而且易于阅读、理解和维护。它体现了简洁、可读性和性能的理念。干净的代码就像一个组织良好、注释良好的文学作品——它不仅仅是关于实现...
阅读 22 分钟
Python 的动态组合是一个基础特性,它增加了其灵活性和表现力。与变量类型显式声明的静态类型语言不同,Python 允许变量在运行时动态更改类型。虽然这种动态特性提供了许多好处,但它也带来了挑战,...
阅读 10 分钟
Python 是一种高级的解释型编程语言,以其简洁性和可读性而闻名,使其成为初学者的好帮手,对专业人士也很有用。Python 由 Guido van Rossum 创建,于 1991 年首次发布,以其显著的使用方式强调代码清晰度...
阅读 6 分钟
PyQt 是一组用于 Qt 应用程序框架的 Python 绑定,它使得能够使用强大的图形用户界面(GUI)进行跨平台编程。PyQt 最重要的控件之一是“QComboBox”,这是一个多功能且普遍使用的下拉列表,允许用户...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India