mumei2018 发表于 2023-6-17 20:56:13

四十五课有一点不明白,是否给变量赋值函数他就变成函数了可直接加()调用了?

power是个函数
square = power(2)后
square就变成了可以加小括号调用的函数了?
事实上square() 就等于 power(2)()了?

假如po函数套了三层
把函数赋值给变量后sq=po(x)(y)
sq() == po(x)(y)()?
是这么理解吗?

sfqxx 发表于 2023-6-17 21:37:26

在 Python 中,函数是第一类对象,也就是说函数可以作为对象被传递、嵌套、赋值给变量等操作。由于函数的这种特性,我们可以定义一个高阶函数 power,返回另一个函数 square,这个函数计算传入参数的平方。

通过 square = power(2),我们得到了一个新的函数 square,它等于 power(2) 的返回值,是一个计算平方的函数。在这个例子中,square 是一个带有一个位置参数的函数,当调用 square(x) 时,实际上是调用 power(2)(x),即计算x2
因此,square() 相当于 power(2)(),其中 power(2) 返回了一个带有一个位置参数的函数,再次调用这个函数并传入参数,才能得到最终的计算结果。

对于一个嵌套了多层的函数,如 po(x)(y)(z),它实际上表示一个接受三个位置参数的函数,即 po(x, y, z)。同样地,将 po(x)(y) 赋值给变量 sq,则 sq 实际上是一个接受一个位置参数的函数,即 po(x, y)。那么 sq() 相当于 po(x, y)(),即调用函数 po(x, y) 并传入参数,得到函数的返回值。

求最佳答案{:10_254:}

歌者文明清理员 发表于 2023-6-18 11:07:43

回答您的问题,是的,当我们将函数赋值给一个变量时,这个变量就成为了一个函数,可以被直接调用。例如,当我们执行square=power(2)后,square就成为了一个可以加小括号直接调用的函数,即等于power(2)。

对于您提到的多层套嵌函数的情况,同样可以使用类似的方式赋值给变量,例如 sq = po(x)(y),然后通过 sq() 来进行调用。而且,确实可以理解为 sq() == po(x)(y)(),即将 po(x)(y) 返回的函数再次进行调用。

下面我来更详细地解释一下。

当我们定义一个函数 power 时,它可以接受一个参数 exp 并返回一个内部函数 exp_of,该内部函数也接受一个参数 base,并返回 base 的 exp 次方。这样,当我们调用 power(2) 时,就会得到一个新的函数 square,它的作用是将传入的参数平方,并返回平方结果,例如 square(3) 将返回 9。同理,当我们调用 power(3) 时,就会得到一个新的函数 cube,它的作用是将传入的参数立方,并返回立方结果,例如 cube(2) 将返回 8。

在这个例子中,我们可以将 square 或 cube 看作是已经经过一次调用 power 返回的内部函数 exp_of,而当我们再次调用 square() 或 cube() 时,则相当于对 exp_of 传入了参数 base,从而得到了最终的结果。

因此,在我们执行 sq = po(x)(y) 时,po(x) 对应了 power(x),返回了内部函数 exp_of,而后面的 (y) 则相当于对 exp_of 进行了一次调用并传入了参数 base,得到了最终的结果。而 sq() 则相当于对 po(x)(y) 返回的函数再次进行调用,得到了相同的结果。

sfqxx 发表于 2023-6-19 17:52:08

歌者文明清理员 发表于 2023-6-18 11:07
回答您的问题,是的,当我们将函数赋值给一个变量时,这个变量就成为了一个函数,可以被直接调用。例如,当 ...

{:10_269:}

歌者文明清理员 发表于 2023-6-19 22:32:04

sfqxx 发表于 2023-6-19 17:52






{:10_256:} 要讲究策略
页: [1]
查看完整版本: 四十五课有一点不明白,是否给变量赋值函数他就变成函数了可直接加()调用了?