鱼C论坛

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

[已解决]内部函数问题

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

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

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

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

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

进程已结束,退出代码0

第一个问题:为什么执行失败   返回的是这个是什么?
第二个问题:  两个return 返回的意义  以及必要性?
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)())     # 楼主的函数调用表达有误,这样才对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

funb()中  不是有表达式  b=a+1   为什么这个参数b并没有被使用呢?  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-21 19:25:47 From FishC Mobile | 显示全部楼层
      打印输出的数字 6 不就是 b 吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

funb(b)
b = a + 1  是不是可以这么理解
当形参b没有被赋值 且表达式b也在等待被赋值的时候
这个参数就是没有意义的?无需声明或者定义?
想知道小甲鱼最近在做啥?请访问 -> 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 作为函数的输入参数,在函数中并未被使用,而是直接被赋了其它数值,其作用只是相当于一个普通的局部变量,根本就不需要成为函数的输入参数,所以,就应该把这个摆设删掉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 18:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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