海月清辉 发表于 2019-11-21 18:12:01

内部函数问题

def funa(a):
    def funb(b):
      b = a + 1
      return b
    return funb
print(funa(5))

执行结果
<function funa.<locals>.funb at 0x000002A7549903A8>

进程已结束,退出代码0


第一个问题:为什么执行失败   返回的是这个是什么?
第二个问题:两个return 返回的意义以及必要性?

jackz007 发表于 2019-11-21 18:26:39

本帖最后由 jackz007 于 2019-11-21 18:27 编辑

def funa(a):
    def funb():      # 输入参数 b 并没有使用,所以,予以删除
      b = a + 1
      return b
    return funb
print(funa(5)())   # 楼主的函数调用表达有误,这样才对

zltzlt 发表于 2019-11-21 18:28:49

1. 返回的是 funb 函数。
2. 第一个 return 是 funb 里面的 return 语句,第二个 return 是 funa 的 return 语句。你不写 return 也行,不写 return 代码返回空值(None)。

帮你把代码改了改:
def funa(a):
    def funb():
      b = a + 1
      return b
    return funb
print(funa(5)())    # 第一个括号是调用 funa,第二个括号是调用 funa 的返回值 funb

海月清辉 发表于 2019-11-21 19:22:24

jackz007 发表于 2019-11-21 18:26


funb()中不是有表达式b=a+1   为什么这个参数b并没有被使用呢?

jackz007 发表于 2019-11-21 19:25:47

      打印输出的数字 6 不就是 b 吗?

海月清辉 发表于 2019-11-21 19:56:08

jackz007 发表于 2019-11-21 19:25
打印输出的数字 6 不就是 b 吗?

funb(b)
b = a + 1是不是可以这么理解
当形参b没有被赋值 且表达式b也在等待被赋值的时候
这个参数就是没有意义的?无需声明或者定义?

jackz007 发表于 2019-11-21 20:01:42

本帖最后由 jackz007 于 2019-11-21 20:04 编辑

海月清辉 发表于 2019-11-21 19:56
funb(b)
b = a + 1是不是可以这么理解
当形参b没有被赋值 且表达式b也在等待被赋值的时候


      因为 b 作为函数的输入参数,在函数中并未被使用,而是直接被赋了其它数值,其作用只是相当于一个普通的局部变量,根本就不需要成为函数的输入参数,所以,就应该把这个摆设删掉。

海月清辉 发表于 2019-11-21 21:47:26

jackz007 发表于 2019-11-21 20:01
因为 b 作为函数的输入参数,在函数中并未被使用,而是直接被赋了其它数值,其作用只是相当于一 ...

了解了谢谢!
页: [1]
查看完整版本: 内部函数问题