鱼C论坛

 找回密码
 立即注册
查看: 2567|回复: 7

[已解决]内部函数问题

[复制链接]
发表于 2019-11-21 18:12:01 | 显示全部楼层 |阅读模式

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

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

x
  1. def funa(a):
  2.     def funb(b):
  3.         b = a + 1
  4.         return b
  5.     return funb
  6. print(funa(5))
复制代码


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

  2. 进程已结束,退出代码0
复制代码


第一个问题:为什么执行失败   返回的是这个是什么?
第二个问题:  两个return 返回的意义  以及必要性?
最佳答案
2019-11-21 18:28:49
1. 返回的是 funb 函数。
2. 第一个 return 是 funb 里面的 return 语句,第二个 return 是 funa 的 return 语句。你不写 return 也行,不写 return 代码返回空值(None)。

帮你把代码改了改:
  1. def funa(a):
  2.     def funb():
  3.         b = a + 1
  4.         return b
  5.     return funb
  6. print(funa(5)())    # 第一个括号是调用 funa,第二个括号是调用 funa 的返回值 funb
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-21 18:26:39 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-21 18:27 编辑
  1. def funa(a):
  2.     def funb():      # 输入参数 b 并没有使用,所以,予以删除
  3.         b = a + 1
  4.         return b
  5.     return funb
  6. print(funa(5)())     # 楼主的函数调用表达有误,这样才对
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 18:28:49 | 显示全部楼层    本楼为最佳答案   
1. 返回的是 funb 函数。
2. 第一个 return 是 funb 里面的 return 语句,第二个 return 是 funa 的 return 语句。你不写 return 也行,不写 return 代码返回空值(None)。

帮你把代码改了改:
  1. def funa(a):
  2.     def funb():
  3.         b = a + 1
  4.         return b
  5.     return funb
  6. print(funa(5)())    # 第一个括号是调用 funa,第二个括号是调用 funa 的返回值 funb
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-21 19:22:24 | 显示全部楼层

funb()中  不是有表达式  b=a+1   为什么这个参数b并没有被使用呢?  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 19:25:47 From FishC Mobile | 显示全部楼层
      打印输出的数字 6 不就是 b 吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-21 19:56:08 | 显示全部楼层
jackz007 发表于 2019-11-21 19:25
打印输出的数字 6 不就是 b 吗?

funb(b)
b = a + 1  是不是可以这么理解
当形参b没有被赋值 且表达式b也在等待被赋值的时候
这个参数就是没有意义的?无需声明或者定义?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 20:01:42 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2019-11-21 20:04 编辑
海月清辉 发表于 2019-11-21 19:56
funb(b)
b = a + 1  是不是可以这么理解
当形参b没有被赋值 且表达式b也在等待被赋值的时候


      因为 b 作为函数的输入参数,在函数中并未被使用,而是直接被赋了其它数值,其作用只是相当于一个普通的局部变量,根本就不需要成为函数的输入参数,所以,就应该把这个摆设删掉。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

了解了  谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 05:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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