Python函数嵌套的两种实现方式详解

巷口听风
巷口听风
发布时间:2026-10-15| 2人浏览过
原创

本文详细解析Python中函数嵌套的两种主要方式:交叉嵌套与回环嵌套。通过具体代码示例,深入剖析函数执行顺序、内存空间开辟及形参实参传递机制。文章指出交叉嵌套涉及同级或上级函数调用,而回环嵌套则聚焦于下级函数调用,并提醒开发者注意变量作用域混淆风险,提供实用的函数定义与调用规范。

函数嵌套主要有两种实现方式:

一、交叉嵌套

交叉嵌套指的是在当前函数内部调用同一层级或上一级函数的技术。

一种编码形式:

# -*- coding: utf-8 -*-
# @Time    : 2022/8/12 15:39
#定义函数func()
def func(foo):
    print(1)
    foo()
    print(3)

def a():
    print(1)

#调用函数func()
b = func(a)
print(b)

输出结果:

1 1 3 None

程序执行时,首先会加载Python文件中顶格的代码。函数func和函数a会先被解析并开辟内存空间存储,但此时并不会执行具体逻辑。当程序运行到赋值语句时,会优先执行等号右侧的代码。此时函数func被调用,并将函数a作为参数传递给func。在func函数内部,代码按顺序从上往下执行:首先打印数字1,接着调用参数foo。

需要明确的是,foo是形参,而实际传入的是函数a。因此,调用foo实际上等同于调用函数a。函数a被调用后,再次打印数字1。函数a执行完毕后,控制流返回至函数func,继续执行后续代码,打印数字3。最后,由于函数没有显式返回值,默认返回None,该值被赋值给变量b。至此,程序运行结束。

另一种编码形式:

def func():
    print(1)
    print("我太难了")
    print(2)

def foo(b):
    print(3)
    ss = b()
    print(ss)
    print(4)

def f(a,b):
    a(b)

f(foo,func)

输出结果:

3 1 我太难了 2 None 4

与前述情况类似,程序首先将所有函数加载到新开辟的内存空间中,暂不执行。直到函数f被调用时,foo和func两个函数作为参数被传入f中。在函数f内部,首先调用foo函数,并将func函数作为参数传入。进入foo函数后,首先打印数字3。随后遇到赋值语句,同样优先执行等号右侧的代码,即调用函数func。

在函数func内部,依次打印三个内容:1、“我太难了”和2。由于func函数没有显式返回值,默认返回None,该值被赋值给变量ss。打印ss即输出None。接着打印数字4,随后返回至函数f,最后回到全局空间。程序执行结束。

二、回环嵌套

回环嵌套是指在函数内部调用其下级(子级)函数的嵌套方式。代码如下(示例):

def func(a,b):
    def foo(b,a):
        print(b,a)
    return foo(a,b) #先执行函数调用
a = func(4,7)
print(a)

输出结果:

4 7 None

函数依然先存储在新开辟的空间中,不会立即调用。当运行到赋值语句时,优先执行等号右侧代码,将两个数字传入函数func中。在func内部,同样先开辟空间存放函数foo。当执行到return语句时,并不会立即终止函数,而是先执行return后面的代码。此时调用foo函数,传入的值是4和7,并将其打印出来。

需要注意的是,函数foo的形参与函数func的形参名称相同,初学者容易混淆。在实际日常编码中,不建议采用这种易引发歧义的写法。在打印出4和7之后,程序运行至函数最后一行,函数默认返回None。该返回值被赋值给变量a,随后打印a的值。

补充:函数调用时的实参和形参之间传递

定义函数的基本格式如下:

def 函数名(参数表):
	函数语句
return 返回值

return关键字用于结束函数执行,并可选择性地返回一个值给调用者。函数的参数和返回值均非必需项。

在定义函数时,参数表中的参数被称为形式参数,简称形参; 而在调用函数时,参数表中的参数被称为实际参数,简称实参。

至此,关于Python函数两种嵌套方法的介绍已完毕。如需了解更多Python函数嵌套相关内容,建议搜索本站历史文章或继续浏览后续相关文章。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。