Orig 发表于 2023-7-28 17:29:56

简单的python问题

请解释一下为什么如下代码的结果是64?看不太懂。
代码如下:

def power(exp):
    def exp_of(base):
      return base ** exp
    return exp_of

cube = power(3)

print(cube(4))

isdkz 发表于 2023-7-28 17:30:05

这段代码涉及到Python中的闭包(closure)概念。

首先,我们定义了一个函数 power(exp) ,它接受一个参数 exp ,并返回另一个函数 exp_of(base) 。

在 exp_of(base) 函数中,我们计算 base 的 exp 次方并返回结果。

然后,我们调用 power(3) ,将3作为参数传递给 power 函数,这将返回一个新的函数,我们将其赋值给 cube 。

最后,我们调用 cube(4) ,这实际上就是调用了 exp_of(4) ,其中 base 被设定为4,而我们之前在 power(3) 中传递的 exp 为3。

所以, cube(4) 的结果是4的3次方,即4 * 4 * 4 = 64。

因此,代码的输出结果是64。

陶远航 发表于 2023-7-28 17:30:08

这段代码中,函数power(exp)定义了一个内部函数exp_of(base),它返回base的exp次方。在主程序中,我们调用power(3)将exp设为3,并将返回的函数对象赋给变量cube。然后,我们使用cube(4)来调用该函数并传入参数4。

因此,当执行cube(4)时,实际上是调用了内部函数exp_of(base),其中base的值为4,而exp的值为3(由于之前的power(3)调用)。所以,表达式base ** exp变成了4 ** 3,即4的3次方,结果为64。

总结:这段代码通过使用嵌套函数和闭包的方式,创建了一个计算指定次方的函数。调用power(3)并传入参数4,返回的函数对象可以计算4的3次方,最终结果为64。
如果问题已经解决,请设置最佳答案

smallwh 发表于 2023-7-28 19:00:02

你的代码用到了闭包。你在power函数里定义了一个exp_of函数,并将它作为power函数的返回值。
cube = power(3),使得power函数的exp参数值为3,cube的值是函数exp_of。
此时,cube(4)相当于exp_of(4),那么base参数的值是4,exp参数在cube中值是3。
所以cube(4)返回值是4**3,即4的3次方64。

hellomyprogram 发表于 2023-7-28 21:14:24

先给代码标上序号:
def power(exp):
    def exp_of(base):
      return base ** exp
    return exp_of

cube = power(3)

print(cube(4))

代码是这样运行的:


代码运行位置代码新增/更改的变量该框架中的所有变量备注
1def power(exp):power = <function power>
[*]power = <function power>

6cube = power(3)
[*]power = <function power>

6>2def exp_of(base):exp_of = <function power.<locals>.exp_of>
[*]exp = 3
[*]exp_of = <function power.<locals>.exp_of>
调用函数体
6>4return exp_of
[*]exp = 3
[*]exp_of = <function power.<locals>.exp_of>
返回闭包函数,退出函数体
6cube = power(3)cube = <function power.<locals>.exp_of>
[*]cube = <function power.<locals>.exp_of>
[*]power = <function power>
此时cube中是有exp变量的
7print(cube(4))
[*]cube = <function power.<locals>.exp_of>
[*]power = <function power>

7>3return base ** exp
[*]base = 4
[*]exp = 3
调用函数体,cube函数体内是有power函数体内的所有变量的,计算后退出函数体
7print(cube(4))
[*]cube = <function power.<locals>.exp_of>
[*]power = <function power>
cube(4)返回了64,输出64

页: [1]
查看完整版本: 简单的python问题