鱼C论坛

 找回密码
 立即注册
查看: 2380|回复: 13

一直没看懂、没理解左右两个函数的区别,所以把它们并列在一块对比

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

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

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

x
1.jpg
2.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-16 13:34:02 | 显示全部楼层
左边的那个是返回函数本身,右边那个是返回函数调用的返回值,但是函数定义的时候是需要参数的,那么你调用的时候也得传参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-16 14:30:25 | 显示全部楼层
isdkz 发表于 2023-5-16 13:34
左边的那个是返回函数本身,右边那个是返回函数调用的返回值,但是函数定义的时候是需要参数的,那么你调用 ...


左边的那个是返回函数本身 --- 有什么意义呢?


右边那个是返回函数调用的返回值 --- 但右边下面除了第一个,其他所有的调用都是返回错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-16 14:47:40 | 显示全部楼层
lzb1001 发表于 2023-5-16 14:30
左边的那个是返回函数本身 --- 有什么意义呢?

一般返回函数地址  都是闭包里面用到的
平常函数  都是返回值的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-16 14:49:04 | 显示全部楼层
右侧  明显是个错误函数  你拿他来想说明点啥呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-16 15:04:43 | 显示全部楼层
wp231957 发表于 2023-5-16 14:49
右侧  明显是个错误函数  你拿他来想说明点啥呢

我就是不清楚、看不明白、不理解,所以才发帖请教哦,哪里知道它是错误的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-16 15:06:09 | 显示全部楼层
lzb1001 发表于 2023-5-16 15:04
我就是不清楚、看不明白、不理解,所以才发帖请教哦,哪里知道它是错误的啊

不知道你是在哪里看到的,但是我们宁可讨论1+1为什么等于2
也不要讨论1+1为什么等于3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-16 17:07:04 | 显示全部楼层

简单理解,左边的,返回函数体本身,而且在局部作用域中存在了一个 z = x * y 的值,你可以对调用 abc(x, y) 函数后的返回值继续进行调用,例如:
d = abc(1, 2)
c = d(2, 3)
f = d(2, 3)

但是这样调用应该没什么意义,因为你即没有对外存储、改变数据,又没有在函数内实现有效的逻辑。

右边的就是相对于是无限的自我调用(递归),但是你右侧的代码是有错误的,因为定义了 x y 两个参数,但返回时调用缺没有进行传入

你可以尝试着调用右边的函数,必然会抛出错误。

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

使用道具 举报

 楼主| 发表于 2023-5-17 08:38:04 | 显示全部楼层
本帖最后由 lzb1001 于 2023-5-17 08:40 编辑
wp231957 发表于 2023-5-16 15:06
不知道你是在哪里看到的,但是我们宁可讨论1+1为什么等于2
也不要讨论1+1为什么等于3


小甲鱼在第020讲课后作业中有下面这样两题:

a. 请问如何访问 funIn() 呢?
1.def funOut():
2.      def funIn():
3.             print('宾果!你成功访问到我啦!')
4.      return funIn()

直接调用 funOut() 即可:

1.funOut()
2.宾果!你成功访问到我啦!



b. 请问如何访问 funIn() 呢?
1.def funOut():
2.          def funIn():
3.                  print('宾果!你成功访问到我啦!')
4.          return funIn

区别于上一题,这里你就需要用 funOut()() 访问啦:

funOut()()
宾果!你成功访问到我啦!

当然你也可以“曲线救国”:

go = funOut()
go()
宾果!你成功访问到我啦!

-------------------------------

上面小甲鱼两个例子的最后一行代码也是一个有括号,一个没有括号

所以我突发奇想了冒出这个奇怪的提问……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-17 08:48:42 | 显示全部楼层
lzb1001 发表于 2023-5-17 08:38
小甲鱼在第020讲课后作业中有下面这样两题:

a. 请问如何访问 funIn() 呢?

一个括号而已,看看下面这些啥用也没有的代码
def myadd(a,b):
    return a+b
print(myadd(5,6))    

def myadd2():
    def add(a,b):
        return a+b
    return add
print(myadd2()(5,6))        

def myadd3():
    def add():
        def add2(a,b):
            return a+b
        return add2    
    return add
print(myadd3()()(5,6))     

def myadd4():
    def add():
        def add2():
            def add3():
                def add4(a,b):
                    return a+b
                return add4    
            return add3    
        return add2   
    return add
print(myadd4()()()()(5,6))    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-17 16:38:40 | 显示全部楼层
isdkz 发表于 2023-5-16 13:34
左边的那个是返回函数本身,右边那个是返回函数调用的返回值,但是函数定义的时候是需要参数的,那么你调用 ...

……但是函数定义的时候是需要参数的,那么你调用的时候也得传参数


我左右两边都传入参数了啊,但左右两边都返回错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-17 16:41:16 | 显示全部楼层
lzb1001 发表于 2023-5-17 16:38
……但是函数定义的时候是需要参数的,那么你调用的时候也得传参数


你用了 return abc()     

你这叫传入参数了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-17 16:59:55 | 显示全部楼层
看看小甲鱼的闭包视频?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-17 17:00:53 | 显示全部楼层
isdkz 发表于 2023-5-17 16:41
你用了 return abc()     

你这叫传入参数了?

我是说我调用的时候传入了参数了

>>> abc(5, 6)

但左右两边还是都返回了错误了

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 05:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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