鱼C论坛

 找回密码
 立即注册
查看: 2078|回复: 4

[已解决]不同的返回值

[复制链接]
发表于 2023-6-25 06:52:55 | 显示全部楼层 |阅读模式

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

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

x
代码1:
def funA():
    x = 690
    def funB():
        print(x)
    return funB()

代码2:
def funA():
    x = 690
    def funB():
        print(x)
    return funB

请问老师,代码1 和 代码2 的返回值不同,请问 return funB  和  return funB() 的返回结果分别是什么啊?分别用于什么场景呢?




最佳答案
2023-6-25 07:03:37
在代码1中,return funB()会立即调用函数funB并返回其执行结果。因此,代码1的返回值是打印出x的值690,并且返回结果为None

在代码2中,return funB只返回了函数对象funB本身,并没有调用它。因此,代码2的返回值是函数对象funB

综上所述,代码1的返回值是打印出x的值690(并返回结果为None),而代码2的返回值是函数对象funB。两者的返回结果不同,适用于不同的场景。

代码1和代码2的返回值适用于不同的场景:

代码1的返回值适用于需要立即执行函数并获取其结果的场景。通过使用return funB(),可以在调用funA函数时立即执行funB函数内部的操作,并将结果返回。这对于希望在调用函数时立即执行某些操作,并且关心函数执行结果的情况非常有用。

代码2的返回值适用于将函数作为对象进行处理的场景。通过使用return funB,可以将函数对象funB作为返回值,而不是立即执行函数内部的操作。这对于希望将函数作为其他函数的参数、将其存储在变量中或以其他方式对函数对象进行操作的情况非常有用。

因此,代码1的返回值适用于立即执行函数并获取结果的场景,而代码2的返回值适用于将函数作为对象进行处理的场景。具体使用哪种返回形式取决于你的需求和代码的设计。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-25 07:03:37 | 显示全部楼层    本楼为最佳答案   
在代码1中,return funB()会立即调用函数funB并返回其执行结果。因此,代码1的返回值是打印出x的值690,并且返回结果为None

在代码2中,return funB只返回了函数对象funB本身,并没有调用它。因此,代码2的返回值是函数对象funB

综上所述,代码1的返回值是打印出x的值690(并返回结果为None),而代码2的返回值是函数对象funB。两者的返回结果不同,适用于不同的场景。

代码1和代码2的返回值适用于不同的场景:

代码1的返回值适用于需要立即执行函数并获取其结果的场景。通过使用return funB(),可以在调用funA函数时立即执行funB函数内部的操作,并将结果返回。这对于希望在调用函数时立即执行某些操作,并且关心函数执行结果的情况非常有用。

代码2的返回值适用于将函数作为对象进行处理的场景。通过使用return funB,可以将函数对象funB作为返回值,而不是立即执行函数内部的操作。这对于希望将函数作为其他函数的参数、将其存储在变量中或以其他方式对函数对象进行操作的情况非常有用。

因此,代码1的返回值适用于立即执行函数并获取结果的场景,而代码2的返回值适用于将函数作为对象进行处理的场景。具体使用哪种返回形式取决于你的需求和代码的设计。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-6-25 09:36:49 | 显示全部楼层
青出于蓝 发表于 2023-6-25 07:03
在代码1中,return funB()会立即调用函数funB并返回其执行结果。因此,代码1的返回值是打印出x的值690,并 ...

真快呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-25 16:31:38 | 显示全部楼层
本帖最后由 sfqxx 于 2023-6-25 18:01 编辑



代码1中的返回值是`None`,因为`funB()`函数并没有显式指定返回值。虽然`funB()`函数会打印变量`x`的值`690`,但这并不等同于函数有一个明确的返回值。使用`return funB()`将会导致函数`funB()`立即执行并打印变量`x`的值,但最终返回的结果仍然是`None`。

代码2中的返回值是`funB`函数对象本身。创建这个闭包时,`funA()`函数定义了一个内部函数`funB()`,返回该内部函数的引用。由于`funB()`本身是一个函数,可以在需要时再调用它来打印变量`x`的值。因此,在代码2中,使用`return funB`会返回一个函数对象,用途与任何其他普通函数一样。该函数对象可以传递给其他函数或方法作为参数,在需要时更具体地进行处理。

总之,使用`return funB()`时,将强制执行内部函数并返回它的结果。而使用`return funB`时,只返回内部函数对象的引用,它可以稍后被再次调用,内容将不会立即执行。两种方法都可以实现闭包的目的,具体选择哪一个取决于代码的实际需求。
求最佳答案

点评

我很赞同!: 5.0
我很赞同!: 5
非常感谢您的指点!  发表于 2023-6-25 21:44
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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