lzb1001 发表于 2023-5-16 13:27:20

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


isdkz 发表于 2023-5-16 13:34:02

左边的那个是返回函数本身,右边那个是返回函数调用的返回值,但是函数定义的时候是需要参数的,那么你调用的时候也得传参数

lzb1001 发表于 2023-5-16 14:30:25

isdkz 发表于 2023-5-16 13:34
左边的那个是返回函数本身,右边那个是返回函数调用的返回值,但是函数定义的时候是需要参数的,那么你调用 ...

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


右边那个是返回函数调用的返回值 --- 但右边下面除了第一个,其他所有的调用都是返回错误

wp231957 发表于 2023-5-16 14:47:40

lzb1001 发表于 2023-5-16 14:30
左边的那个是返回函数本身 --- 有什么意义呢?




一般返回函数地址都是闭包里面用到的
平常函数都是返回值的

wp231957 发表于 2023-5-16 14:49:04

右侧明显是个错误函数你拿他来想说明点啥呢

lzb1001 发表于 2023-5-16 15:04:43

wp231957 发表于 2023-5-16 14:49
右侧明显是个错误函数你拿他来想说明点啥呢

我就是不清楚、看不明白、不理解,所以才发帖请教哦,哪里知道它是错误的啊

wp231957 发表于 2023-5-16 15:06:09

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

不知道你是在哪里看到的,但是我们宁可讨论1+1为什么等于2
也不要讨论1+1为什么等于3

Twilight6 发表于 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 两个参数,但返回时调用缺没有进行传入

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

lzb1001 发表于 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()
宾果!你成功访问到我啦!

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

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

所以我突发奇想了冒出这个奇怪的提问……

wp231957 发表于 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))   

lzb1001 发表于 2023-5-17 16:38:40

isdkz 发表于 2023-5-16 13:34
左边的那个是返回函数本身,右边那个是返回函数调用的返回值,但是函数定义的时候是需要参数的,那么你调用 ...

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


我左右两边都传入参数了啊,但左右两边都返回错误。

isdkz 发表于 2023-5-17 16:41:16

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




你用了 return abc()   

你这叫传入参数了?

Axiujiu 发表于 2023-5-17 16:59:55

看看小甲鱼的闭包视频?

lzb1001 发表于 2023-5-17 17:00:53

isdkz 发表于 2023-5-17 16:41
你用了 return abc()   

你这叫传入参数了?

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

>>> abc(5, 6)

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

页: [1]
查看完整版本: 一直没看懂、没理解左右两个函数的区别,所以把它们并列在一块对比