鱼C论坛

 找回密码
 立即注册
查看: 1787|回复: 4

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

[复制链接]
发表于 2023-6-17 20:56:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

假如po函数套了三层
把函数赋值给变量后sq=po(x)(y)
sq() == po(x)(y)()?
是这么理解吗?
最佳答案
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) 返回的函数再次进行调用,得到了相同的结果。
为啥变量吧变函数了.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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) 并传入参数,得到函数的返回值。

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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) 返回的函数再次进行调用,得到了相同的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-19 22:32:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 22:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表