Python中return与函数执行机制详解:内存地址、返回值与高阶函数

Dylan
Dylan
发布时间:2026-10-13| 5人浏览过
原创

本文详细解析Python中函数名打印与函数执行的区别,阐述return语句如何触发嵌套函数运行及返回值传递。通过多个实例说明当return内容为函数调用、常量或变量时的执行逻辑,并深入讲解高阶函数传参与赋值的执行过程,帮助开发者准确掌握Python函数返回与执行的底层机制。

Python中return与函数执行机制详解:内存地址、返回值与高阶函数

1 打印函数名和打印函数的执行过程的区别

打印函数名与执行函数的区别

例子1.1


def a():
 print(111)

print(a) # 打印a函数的内存地址,不会对a函数有影响,a函数不会执行
print(a()) # 打印a函数的打印部分,并打印a函数的返回值

打印结果:


<function a at 0x0000000001D02E18>

111

None

总结:

直接打印函数名print(a),输出的是该函数在内存中的地址,此时函数体不会被执行。

打印函数的执行结果:print(a()),这会触发函数内部的print语句输出,并打印函数最终的返回值。如果函数未定义return语句,则默认返回None。

例子1.2


def a():
 print(111)
 return None
def b():
 return a() # 打印a函数中打印的部分,返回a函数的返回值。打印:111,返回None

print(b) # 打印b函数的内存地址
print(b()) # 打印b函数中打印的部分,打印b函数的返回值

打印结果:


<function b at 0x00000000021EB8C8>

111

None

代码过程解析如下:

print(b) 仅打印变量b(即函数对象)的内存地址,不会触发b函数的执行,b函数保持未运行状态。

print( b() ) :

《1》首先执行b函数。由于b函数内部没有定义具体的主体逻辑,它直接返回空值。

《2》接着打印b函数的返回值:return a()。因为b函数正在运行,所以return语句中的a()也会被调用并执行。

《2.1》,运行 a(),此时会打印出 111。

《2.2》,由于a()函数内部没有定义明确的return值,系统取None作为a()的返回值,并将这个None返回给b函数。因此,b函数的最终返回值也是None,所以print(b())的输出结果为 None。

函数主体与return中的执行逻辑

2,函数内容主体中执行:

例子2.


def a():
 print('aaaaaaaa') # 打印:aaaaaaaa
def b():
 a() # 执行a函数

b() # 执行b函数

打印结果:


aaaaaaaa

3,在函数的return中执行:

例子3.


def a():
 print('aaaaaaaa')
def b():
 return a()

b()

打印结果:


aaaaaaaa

总结:当一个函数执行时,如果其return语句的内容是一个可执行的程序(如函数调用),该程序会正常执行。此时的返回值概念是:先打印程序中的print部分,然后返回该函数的返回值;若未定义返回值,则返回None。

函数名打印与内存地址

4,打印函数名(本质就是打印变量名对应的内存地址:也就是该函数对应的内容主体的内存地址)

例子4.


def a():
 print(111) # 打印:111
print(a) # 打印a函数的内存地址
def b():
 return a # 返回a函数的内存地址
print(b) # 打印b函数的内存地址

return a() 的情况: 尽管这次return的是a(),但由于b()函数并没有被调用(即没有执行b()),程序仍然只是打印两个函数的内存地址,而不会执行函数体内的逻辑。

return常量与变量的执行差异

5,函数中的 return中的内容是常量和变量(可执行的函数)的情况下的函数执行问题

return中为一个常量时: 因为b()函数里面是空的。而return的a是一个常量,实际上就是a函数的内存地址。

例子5.1.


def a():
 print(111) # 打印:111
def b():
 return a # 返回a函数的内存地址

b() 

return中是一个变量(可执行的函数),则当b函数运行时,b函数的主体和return里面的程序都会运行,效果如下:

例子5.2


def a():
 print(111)
def b():
 return a() # 打印a函数中打印的部分,返回a函数的返回值

b()

打印结果:


111

高阶函数传参与赋值执行

6,打印传递参数的高阶函数的返回值,一定要理解a(f)就是在执行a函数

例子6.1


def f():
 print(11111111) # 执行结果 11111111
 return None
def a(b):
 print(222222) # 执行结果 222222
 return b # 执行结果 返回b函数的内存地址

print(a(f)) # 打印a函数中打印的部分,打印a函数的返回值。打印a函数中的打印部分:222222,打印a函数的返回值也就是打印f函数的内存地址

解析:打印 a (f)函数的整个过程相当于打印不带参数的 print(a())的过程!!!!,即a(b)函数会被执行并且打印返回值。

print(a(f)):打印a函数中打印的部分,并且打印a函数的返回值,也就是执行print(222222)和打印f函数的内存地址。

同理:给一个高阶函数传参后赋值也会执行该函数,例如:

例子6.2


def f():
 print(11111111) # 执行结果 打印:11111111
 return None
def a(n):
 print(222222) # 执行结果 打印:222222
 return f # 打印f函数中的打印部分,返回f函数的返回值。执行结果:111111 return None

b = a(f)

上例中的b =a(f) 分两步理解:

1,a(f) ,相当于不带参数的a(),意思是执行a函数,a(f) 就是导入参数 f 的情况下执行该函数。

2,b= a(f), 就是把a(f)函数运行后的返回值 赋值给b,供后续的变量b来调用。

以上这篇python中return的返回和执行实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

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

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 算法库。