鱼C论坛

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

内嵌函数基础求助

[复制链接]
发表于 2016-10-8 14:51:30 | 显示全部楼层 |阅读模式
1鱼币
def funX():
    x = 5
    def funY():
        nonlocal x
        x += 1
        return x
    return funY

a = funX()
print(a())
print(a())
print(a())

这个题目中,如果没有 return funY,会是什么结果?
                      为什么要将funX()赋值给a?
                      print(a()),a为什么后面也要跟()?

最佳答案

查看完整内容

这是典型的闭包,简单解释一下: 如果没有 return funY,会是什么结果?没有的话不会调用funY,funX的返回值为None,也就无法a()了 为什么要将funX()赋值给a?由于funX的返回值为funY,可以认为a等同于funY,注意这里是funY函数名,不是funY函数的返回值。 print(a()),a为什么后面也要跟()?才等同于funY(),真正实现了funY()的运行结果,即返回x值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-8 14:51:31 | 显示全部楼层
这是典型的闭包,简单解释一下:
如果没有 return funY,会是什么结果?没有的话不会调用funY,funX的返回值为None,也就无法a()了
为什么要将funX()赋值给a?由于funX的返回值为funY,可以认为a等同于funY,注意这里是funY函数名,不是funY函数的返回值。
print(a()),a为什么后面也要跟()?才等同于funY(),真正实现了funY()的运行结果,即返回x值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-8 14:57:52 | 显示全部楼层
不写return funY会抛异常,因为funX的返回值是函数,此时a就相当于指向函数funY的指针,调用函数必须使用a()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-8 15:39:23 | 显示全部楼层
谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-18 09:12:32 | 显示全部楼层
我爱小甲鱼 !~我是小甲鱼的脑残粉!~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-10-18 10:01:29 | 显示全部楼层
°﹍M、Sulayman 发表于 2016-10-18 09:12
我爱小甲鱼 !~我是小甲鱼的脑残粉!~

你挺淘啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-25 09:41:29 | 显示全部楼层
受教了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-28 16:41:17 | 显示全部楼层
为什么有的时候返回函数加括号。有的不加
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-23 05:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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