鱼C论坛

 找回密码
 立即注册
查看: 185|回复: 2

[已解决]关于闭包中的内部函数是否只能以return语句结束的疑问

[复制链接]
发表于 2024-8-30 23:57:23 | 显示全部楼层 |阅读模式

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

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

x
闭包结构中含有多层函数嵌套,其中内层函数是不是只能通过return结束?

好奇内层函数除了return语句结束外,还有没有可能通过其他方式结束,如print,或者内层函数通过()执行等?请各位大神指定!!!
最佳答案
2024-8-31 00:32:22
本帖最后由 jackz007 于 2024-8-31 01:02 编辑

     1、外层函数必须使用 return 返回内层函数的名称,这是因为如果不这样,在闭包函数的外部就无法访问到其内层函数。
     2、内层函数是否使用 return 结束完全取决于需要,如果这个函数需要反馈给调用者一个结果,那就使用 return 返回,否则,就不需要。

【有 return 实例】:
def fib() :
    a , b = 0 , 0
    def inner() :
        nonlocal a , b
        a , b = b , a + b
        if not b : b += 1
        return a               # 每次调用闭包函数需要取得斐波那契数列新的数据,所以,内层函数需要返回计算结果。
    return inner               # 外层函数必须返回内层函数的名称

fx = fib()
x = []
for _ in range(20):
    x . append(fx())           # 每次调用闭包函数需要取得斐波那契数列新的数据,所以,内层函数需要返回计算结果。
print(x)

运行实况:
D:\[exercise]\Python>python x.py
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]

D:\[exercise]\Python>

【无 reuturn 实例】:
def foo() :
    c = 0
    def inner() :
        nonlocal c
        c += 1
        print("%2d. 欢迎来到 FishC" % c)
    return inner               # 外层函数必须返回内层函数的名称

ex = foo()
for _ in range(20):
    ex()
运行实况:
D:\[exercise]\Python>python x.py
 1. 欢迎来到 FishC
 2. 欢迎来到 FishC
 3. 欢迎来到 FishC
 4. 欢迎来到 FishC
 5. 欢迎来到 FishC
 6. 欢迎来到 FishC
 7. 欢迎来到 FishC
 8. 欢迎来到 FishC
 9. 欢迎来到 FishC
10. 欢迎来到 FishC
11. 欢迎来到 FishC
12. 欢迎来到 FishC
13. 欢迎来到 FishC
14. 欢迎来到 FishC
15. 欢迎来到 FishC
16. 欢迎来到 FishC
17. 欢迎来到 FishC
18. 欢迎来到 FishC
19. 欢迎来到 FishC
20. 欢迎来到 FishC

D:\[exercise]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-8-30 23:57:44 | 显示全部楼层
在闭包中,内层函数并不一定只能通过 `return` 语句结束。实际上,内层函数可以通过多种方式结束,包括但不限于 `return`、`print`、`pass` 等。下面是一些示例来说明这一点:

1. **使用 `return` 语句结束**:
def outer_function():
       def inner_function():
           return "Hello, World!"
       return inner_function

2. **使用 `print` 语句结束**:
def outer_function():
       def inner_function():
           print("Hello, World!")
       return inner_function

3. **使用 `pass` 语句结束**:
def outer_function():
       def inner_function():
           pass
       return inner_function

4. **内层函数通过 `()` 执行**:
def outer_function():
       def inner_function():
           print("Hello, World!")
       inner_function()
       return inner_function

在这些示例中,内层函数可以通过不同的方式结束,而不仅仅是 `return` 语句。关键在于内层函数的逻辑和你希望它完成的任务。希望这些示例能帮助你理解闭包中内层函数的多种结束方式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-31 00:32:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-8-31 01:02 编辑

     1、外层函数必须使用 return 返回内层函数的名称,这是因为如果不这样,在闭包函数的外部就无法访问到其内层函数。
     2、内层函数是否使用 return 结束完全取决于需要,如果这个函数需要反馈给调用者一个结果,那就使用 return 返回,否则,就不需要。

【有 return 实例】:
def fib() :
    a , b = 0 , 0
    def inner() :
        nonlocal a , b
        a , b = b , a + b
        if not b : b += 1
        return a               # 每次调用闭包函数需要取得斐波那契数列新的数据,所以,内层函数需要返回计算结果。
    return inner               # 外层函数必须返回内层函数的名称

fx = fib()
x = []
for _ in range(20):
    x . append(fx())           # 每次调用闭包函数需要取得斐波那契数列新的数据,所以,内层函数需要返回计算结果。
print(x)

运行实况:
D:\[exercise]\Python>python x.py
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]

D:\[exercise]\Python>

【无 reuturn 实例】:
def foo() :
    c = 0
    def inner() :
        nonlocal c
        c += 1
        print("%2d. 欢迎来到 FishC" % c)
    return inner               # 外层函数必须返回内层函数的名称

ex = foo()
for _ in range(20):
    ex()
运行实况:
D:\[exercise]\Python>python x.py
 1. 欢迎来到 FishC
 2. 欢迎来到 FishC
 3. 欢迎来到 FishC
 4. 欢迎来到 FishC
 5. 欢迎来到 FishC
 6. 欢迎来到 FishC
 7. 欢迎来到 FishC
 8. 欢迎来到 FishC
 9. 欢迎来到 FishC
10. 欢迎来到 FishC
11. 欢迎来到 FishC
12. 欢迎来到 FishC
13. 欢迎来到 FishC
14. 欢迎来到 FishC
15. 欢迎来到 FishC
16. 欢迎来到 FishC
17. 欢迎来到 FishC
18. 欢迎来到 FishC
19. 欢迎来到 FishC
20. 欢迎来到 FishC

D:\[exercise]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 18:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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