Python中return语句能否调用函数?代码执行逻辑疑问
Python函数调用与return语句运行逻辑解析
先看你最初的代码:
def func1(a): return a ** a def func2(a): return func1(a) * func1(a) print(func2(2))
运行输出16的逻辑可以一步步拆解:
- 执行
print(func2(2))时,首先会调用func2(2); func2的return语句里是func1(a) * func1(a),Python在处理乘法表达式时,会先分别计算左右两边的所有子表达式,再执行乘法运算;- 两次调用
func1(2),每次都会计算2**2得到4,然后4*4=16,func2返回16,最终print输出这个结果。
你的疑问解答
return语句执行时会调用函数吗?return可以调用函数吗?
当然可以。return语句的作用是返回一个值,这个值可以是任意合法的Python表达式——包括函数调用。当Python执行到return时,会先完整计算右边的表达式,这其中的函数调用会被正常触发,拿到返回值后再把这个最终结果作为当前函数的返回值。为什么
func1被调用了两次?和*有关吗?
完全和*有关。乘法运算符*需要左右两个操作数都有确定的值才能计算,所以Python必须先执行左边的func1(a)拿到结果,再执行右边的func1(a)拿到另一个结果,最后把两个结果相乘。这就导致func1被连续调用了两次,所以你添加的print("Hello World")会输出两次。
如果想避免重复调用,可以先把func1的结果存到变量里,再用变量做乘法:
def func2(a): temp = func1(a) return temp * temp
这样func1只会被调用一次,"Hello World"也只会打印一次。
内容的提问来源于stack exchange,提问作者user21058037
相关产品推荐
相关产品推荐

