鱼C论坛

 找回密码
 立即注册
查看: 791|回复: 18

[已解决]零基础入门学习python 课本疑问求解

[复制链接]
发表于 2020-5-24 13:51:38 | 显示全部楼层 |阅读模式

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

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

x
第二版书本第76页代码:

def funX(x):
        def funY(y):
                return x*y
        return funY
temp=funX(8)
temp(5)

返回值是40,请问这里是怎么看的,因为我感觉上面代码并没有对y值进行定义

望学友们解答,谢谢~
最佳答案
2020-5-24 14:23:27
zwy8888 发表于 2020-5-24 14:19
为什么可以这样写, temp=funX(8) 明明是把函数值赋值给了temp 这样好像temp变成了一个函数一样{:10_243: ...

没错啊 的确是变成函数了 你可以试试tpye
temp = funX(8)
print(type(temp))
print(temp(5))
运行后结果是:
<class 'function'>
40
因为第一次赋值是赋值给 x  只给外部函数的

又因为外部函数返回的是 funY

所以你 temp(5) 就等价于 funY(5)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-24 13:53:47 | 显示全部楼层
我感觉上面代码并没有对y值进行定义
为什么不感觉上面代码没有对x值进行定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 13:54:53 | 显示全部楼层
def funX(x):
        def funY(y):
                return x*y
        return funY

temp(5)
实际上可以分解来看,有助于理解:
先 把 8 传入 funX 并赋值给temp  temp=funX(8)
# 此时 temp 就等于这样的
def funX(8):
    def funY(y):
        return 8 * y
    return funY
然后在 temp(5) 把 5 传入:
def funX(8):
    def funY(5):
        return 8 * 5
    return funY
最后返回 40
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 13:55:28 | 显示全部楼层
def funX(x):
        def funY(y):
                return x*y
        return funY
temp=funX(8)
temp(5)

标红的地方难道不是在对 x, y 进行定义吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 13:59:19 | 显示全部楼层
liuzhengyuan 发表于 2020-5-24 13:55
def funX(x):
        def funY(y):
                return x*y

我说错了,是我感觉没有赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 13:59:58 | 显示全部楼层
zwy8888 发表于 2020-5-24 13:59
我说错了,是我感觉没有赋值

def funX(x):
        def funY(y):
                return x*y
        return funY
[b]temp=funX(8)
temp(5)
[/b]

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

使用道具 举报

 楼主| 发表于 2020-5-24 14:01:34 | 显示全部楼层
Twilight6 发表于 2020-5-24 13:54
实际上可以分解来看,有助于理解:
先 把 8 传入 funX 并赋值给temp  temp=funX(8) :

temp(5)  这个语句是对y进行赋值的意思吗?我还是有点懵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 14:03:02 | 显示全部楼层
zwy8888 发表于 2020-5-24 13:59
我说错了,是我感觉没有赋值

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

    return funY

temp = funX(8)(5)
print(temp)
你也可以这样看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 14:03:58 | 显示全部楼层
zwy8888 发表于 2020-5-24 14:01
temp(5)  这个语句是对y进行赋值的意思吗?我还是有点懵

内嵌函数的参数是第二个括号里的,第一个括号是外部的函数的参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 14:05:31 | 显示全部楼层
zwy8888 发表于 2020-5-24 14:01
temp(5)  这个语句是对y进行赋值的意思吗?我还是有点懵

是的  temp(5)  这个语句是对y进行赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 14:11:49 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 13:53
为什么不感觉上面代码没有对x值进行定义

funX(8)就是对x的定义吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 14:12:46 | 显示全部楼层
liuzhengyuan 发表于 2020-5-24 13:59
def funX(x):
        def funY(y):
                return x*y

好的明白了,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 14:13:01 | 显示全部楼层
zwy8888 发表于 2020-5-24 14:11
funX(8)就是对x的定义吧

那 temp(5) 是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 14:19:56 | 显示全部楼层
Twilight6 发表于 2020-5-24 14:03
内嵌函数的参数是第二个括号里的,第一个括号是外部的函数的参数

为什么可以这样写, temp=funX(8) 明明是把函数值赋值给了temp 这样好像temp变成了一个函数一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 14:23:27 | 显示全部楼层    本楼为最佳答案   
zwy8888 发表于 2020-5-24 14:19
为什么可以这样写, temp=funX(8) 明明是把函数值赋值给了temp 这样好像temp变成了一个函数一样{:10_243: ...

没错啊 的确是变成函数了 你可以试试tpye
temp = funX(8)
print(type(temp))
print(temp(5))
运行后结果是:
<class 'function'>
40
因为第一次赋值是赋值给 x  只给外部函数的

又因为外部函数返回的是 funY

所以你 temp(5) 就等价于 funY(5)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 14:24:12 | 显示全部楼层
zwy8888 发表于 2020-5-24 14:19
为什么可以这样写, temp=funX(8) 明明是把函数值赋值给了temp 这样好像temp变成了一个函数一样{:10_243: ...

这就是链式调用,
temp就是funX的返回值,也就是一个函数
temp当然可以操作这个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 14:30:09 | 显示全部楼层
Twilight6 发表于 2020-5-24 14:23
没错啊 的确是变成函数了 你可以试试tpye

运行后结果是:

嗯嗯,貌似理解了,多谢啦  还真是要细品
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 14:31:08 | 显示全部楼层
qiuyouzhi 发表于 2020-5-24 14:24
这就是链式调用,
temp就是funX的返回值,也就是一个函数
temp当然可以操作这个函数

嗯嗯,链式调用 目前对于我是一个新名词,学到啦 谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 14:31:09 | 显示全部楼层
zwy8888 发表于 2020-5-24 14:30
嗯嗯,貌似理解了,多谢啦  还真是要细品

如果帮助到你~那就给个最佳把~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 04:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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