鱼C论坛

 找回密码
 立即注册
查看: 1748|回复: 6

[已解决]这个函数为什么这么调用?谢谢

[复制链接]
发表于 2018-1-4 22:24:04 | 显示全部楼层 |阅读模式

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

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

x
>>>def funX(x):
             def funY(y):
                   retuen x*y
        return funY

>>>i = funX(8)          #调用函数方法1
>>>i(5)
40

>>>funX(8)(5)          #调用函数方法2

这两种方法说x的值为8(可以理解),为什么y的值是5,怎么解释?;如方法2    funX()括号内仅为一个参数,为什么后面又加个参数5。
最佳答案
2018-1-4 23:07:52
funY 是内部函数,整体来讲就是闭包
funX 函数返回的值是 funY 的地址。

上面可能不好理解。
简单的说
i = funX(8) i(5) 和 funX(8)(5)    #这里,你简单的把i(5) 中的i 替换成funX(8) 是不是就等于 是funX(8)(5)了

def funX(x):
             def funY(y):
                   retuen x*y
        return funY
这个函数改成这样
def funX(x):
             def funY(y):
                   retuen x*y
        return funY(5)

调用:
>>> i = funX(8)
>>> i
40

注:要理解内部函数和闭包,关键看return 的函数是带() ,还是不带。带()表示返回的是值,不带表示返回的是函数的地址,是地址那么说明还有操作的的必要,比如前面的i = funX(8) i(5) 这里i(5)就在返回地址的情况下再传入5得能得到值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-4 23:03:32 | 显示全部楼层
两种调用方法时一样的,只是第一个用了中间变量
第二种其实就是( funX(8) )(5)去掉括号之后的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 23:07:52 | 显示全部楼层    本楼为最佳答案   
funY 是内部函数,整体来讲就是闭包
funX 函数返回的值是 funY 的地址。

上面可能不好理解。
简单的说
i = funX(8) i(5) 和 funX(8)(5)    #这里,你简单的把i(5) 中的i 替换成funX(8) 是不是就等于 是funX(8)(5)了

def funX(x):
             def funY(y):
                   retuen x*y
        return funY
这个函数改成这样
def funX(x):
             def funY(y):
                   retuen x*y
        return funY(5)

调用:
>>> i = funX(8)
>>> i
40

注:要理解内部函数和闭包,关键看return 的函数是带() ,还是不带。带()表示返回的是值,不带表示返回的是函数的地址,是地址那么说明还有操作的的必要,比如前面的i = funX(8) i(5) 这里i(5)就在返回地址的情况下再传入5得能得到值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-6 21:42:55 | 显示全部楼层
ba21 发表于 2018-1-4 23:07
funY 是内部函数,整体来讲就是闭包
funX 函数返回的值是 funY 的地址。

那函数的地址是什么意思啊?与函数返回值有什么区别吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-6 22:02:22 | 显示全部楼层
xue11 发表于 2018-1-6 21:42
那函数的地址是什么意思啊?与函数返回值有什么区别吗?

地址就是地址,值就是值,之前有个我是这么给举例的:

假如你要取老婆 , 你老婆自己跑你家,那么这就是值。
如果你老婆只给了你地址,也就意味着要你去接她人,那么这就是地址。所以要得到她人,你还得去她家接到你家。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-9 23:09:28 | 显示全部楼层
ba21 发表于 2018-1-6 22:02
地址就是地址,值就是值,之前有个我是这么给举例的:

假如你要取老婆 , 你老婆自己跑你家,那么这就 ...

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 14:58:32 From FishC Mobile | 显示全部楼层
好复杂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-5 11:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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