鱼C论坛

 找回密码
 立即注册
查看: 1089|回复: 8

[已解决]閉包與呼叫函式的括號

[复制链接]
发表于 2020-9-21 00:41:15 | 显示全部楼层 |阅读模式

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

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

x
在第二十講 的課堂中小甲魚舉的例子
如圖中的三個問題
1. 為何FunY 可不用括弧?
2. return FunY 與 return FunY() 的差別分別是什麼?
3. 為什麼可以用FunX(x) 就把值帶入至FunY()??

截圖 2020-09-21 上午12.26.12.png

以為自己懂了函數,看完這講又不懂了,有勞各位大神解惑,感謝

最佳答案
2020-9-21 09:32:51
1和2,没有括号情况下,表示返回函数指针,有括号就表示调用这个FunY函数了,这里要返回函数指针,再需要的时候调用!
3,FunY在FunX内部,在外部不能访问到,只能通过FunX来访问!
FunX(8)(5)表示先给Funx传入x参数,再给FunY传入y参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-21 09:18:03 | 显示全部楼层
没括号是返回方法对象,有括号是返回方法调用,
i = Funx(8)   相当于
def i(y):
    return 8*y
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 09:32:51 | 显示全部楼层    本楼为最佳答案   
1和2,没有括号情况下,表示返回函数指针,有括号就表示调用这个FunY函数了,这里要返回函数指针,再需要的时候调用!
3,FunY在FunX内部,在外部不能访问到,只能通过FunX来访问!
FunX(8)(5)表示先给Funx传入x参数,再给FunY传入y参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-21 12:27:34 | 显示全部楼层
CH10 发表于 2020-9-21 09:18
没括号是返回方法对象,有括号是返回方法调用,
i = Funx(8)   相当于
def i(y):

hi ch10
如果返回方法調用就是呼叫函數
那返回方法對象的作用是?....一直搞不明白
是如同 id(x) 這樣的意思嗎?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-21 12:35:51 | 显示全部楼层
弱弱的佳佳 发表于 2020-9-21 09:32
1和2,没有括号情况下,表示返回函数指针,有括号就表示调用这个FunY函数了,这里要返回函数指针,再需要的 ...

Hi 弱弱的佳佳

1. "指針" 可以理解是object嗎?
2. 若一個函式內部還有函式,一般都可以由最外層的函式來帶入這樣的理解正確嗎?

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

使用道具 举报

发表于 2020-9-21 12:54:48 | 显示全部楼层
闭包(closure)函数式编程的一个重要的语法结构
如:
>>> def funx(x):
        def funy(y):
                return x*y
        return funy

>>> funx(3)(6)
18
>>>
//当funx(x)中的x在funy(y)中被调用时,就形成了闭包
//可以 funx(A)(B),A是第一个函数,B是第二个函数。
//也可以
>>> i = funx(3)
>>> i (6)
18
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 16:37:00 | 显示全部楼层
xavier113 发表于 2020-9-21 12:35
Hi 弱弱的佳佳

1. "指針" 可以理解是object嗎?

1,指针可以理解为一个object,可以用id()查看内存地址
2,可以这么理解,外部函数内部的内部函数只能通过外部函数来访问,因为内部函数只存在于内部,这就是闭包,当外部函数使用结束,内部函数也就不存在了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-22 09:45:10 | 显示全部楼层
弱弱的佳佳 发表于 2020-9-21 16:37
1,指针可以理解为一个object,可以用id()查看内存地址
2,可以这么理解,外部函数内部的内部函数只能通 ...

Hi 弱弱的佳佳
感謝回覆

1. 查看了 FunY 的id 與指針的所打印出的位置不相同又搞糊塗了...
2. 明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-22 14:47:31 | 显示全部楼层
xavier113 发表于 2020-9-22 09:45
Hi 弱弱的佳佳
感謝回覆

每次运行的内存地址肯定不一样呀,这是操作系统自行分配的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 15:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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