Python函数嵌套的两种实现方式详解
本文详细解析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函数嵌套相关内容,建议搜索本站历史文章或继续浏览后续相关文章。感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













