鱼C论坛

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

[已解决]Python第二版第6章(第76页)的def funY(y)中的y的赋值问题

[复制链接]
发表于 2020-7-10 10:00:37 | 显示全部楼层 |阅读模式

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

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

x
原代码:
>>def funX(x):
    def funY(y):
        return x*y
    return funY

>>temp= funX(8)
>>temp(5)
40

temp=funX(8)是对X进行了赋值X=8;
但是为什么temp(5)就对y进行了赋值y=5呢?
最佳答案
2020-7-10 10:08:58
本帖最后由 Twilight6 于 2020-7-10 10:16 编辑



要知道 当函数名带上括号时候,函数返回的是函数运行的结果

当函数名不带括号时候,函数返回的是一个函数体

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


因为你定义的 funX 函数返回的是 funY ,当函数不带括号时候就代表一个函数体,也就是这 funY 一整个函数

所以你这里 temp= funX(8) ,带上括号,所以是把 x = 8 传入后调用函数运行的结果,就可以看成:
def funX(8):
    def funY(y):
        return 8*y
    return funY

又因为返回的是 funY 不带括号,是整个函数体,所以实际上 temp= funX(8)  就等于了 temp = funY 即代码可以看成这样:
def funY(y):
    return 8*y

此时你在对 temp(5) 那么就是 将 funY 的 y 参数赋值为 5

所以最后返回的结果是 return 8 * 5

第一次是对 x 传入参数,因为第一次调用返回的是个函数,则第二次传入的参数就是返回后函数的参数值了,即第一次 x = 8,第二次 y = 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-10 10:03:27 | 显示全部楼层
因为funX函数返回了funY函数
所以temp函数就相当于funY函数
temp(5)就相当于funY(5)
理解了吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 10:08:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-10 10:16 编辑



要知道 当函数名带上括号时候,函数返回的是函数运行的结果

当函数名不带括号时候,函数返回的是一个函数体

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


因为你定义的 funX 函数返回的是 funY ,当函数不带括号时候就代表一个函数体,也就是这 funY 一整个函数

所以你这里 temp= funX(8) ,带上括号,所以是把 x = 8 传入后调用函数运行的结果,就可以看成:
def funX(8):
    def funY(y):
        return 8*y
    return funY

又因为返回的是 funY 不带括号,是整个函数体,所以实际上 temp= funX(8)  就等于了 temp = funY 即代码可以看成这样:
def funY(y):
    return 8*y

此时你在对 temp(5) 那么就是 将 funY 的 y 参数赋值为 5

所以最后返回的结果是 return 8 * 5

第一次是对 x 传入参数,因为第一次调用返回的是个函数,则第二次传入的参数就是返回后函数的参数值了,即第一次 x = 8,第二次 y = 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 10:51:30 | 显示全部楼层
lhgzbxhz 发表于 2020-7-10 10:03
因为funX函数返回了funY函数
所以temp函数就相当于funY函数
temp(5)就相当于funY(5)

谢谢大神回复,虽然我还是未理解到精髓,感谢答疑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 10:52:01 | 显示全部楼层
Twilight6 发表于 2020-7-10 10:08
要知道 当函数名带上括号时候,函数返回的是函数运行的结果

而当函数名不带括号时候,函数返回的是 ...

谢谢大神答复,我似乎有点明白了,再消化消化,感谢答疑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 01:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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