鱼C论坛

 找回密码
 立即注册
查看: 1756|回复: 6

[已解决]python问题

[复制链接]
发表于 2023-8-2 09:09:59 | 显示全部楼层 |阅读模式

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

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

x
下面两段代码有什么区别:
第一个:
def funA():
    print("123")
    def funB():
        print("456")
    funB()

funA()

第二个:
def funA():
    print("123")
    def funB():
        print("456")
    return funB()

funA()
最佳答案
2023-8-2 09:14:41
本帖最后由 hellomyprogram 于 2023-8-2 09:23 编辑

这两个在返回值和实现上没有什么不同:
funA 在两段代码都返回 None
funB 在两段代码也都返回 None
两段代码都会输出 123 456

但是如果 funB 不是返回 None 的话,情况就有所不同。
在第一段代码中,funA 仅仅调用了 funB,而不将 funB 的返回值传输出去。
而第二段代码中,funA 将 funB 的返回值传输出去,因此调用 funA 也会返回 funB 的返回值。

以下是两段代码各自的运行过程:
第一段代码
def funA():
    print("123")
    def funB():
        print("456")
    funB()

funA()

代码行数代码输出备注
1def funA():定义 funA
7funA()调用 funA
7>2print("123")123
7>3def funB():123定义 funB
7>5funB()123调用 funB
7>5>4print("456")123
456
两个函数均返回了 None


第二段代码
def funA():
    print("123")
    def funB():
        print("456")
    return funB()

funA()

代码行数代码输出备注
1def funA():定义 funA
7funA()调用 funA
7>2print("123")123
7>3def funB():123定义 funB
7>5return funB()123返回 funB 的返回值
7>5>4print("456")123
456
funB 返回 None
7>5return funB()123
456
funB 返回 None , funA 会把 funB 的返回值返回,也就是 funA 的返回值就是 funB 的返回值

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-2 09:10:11 | 显示全部楼层
这两段代码的区别在于函数funA的返回值。

第一个代码中,funA函数定义了一个嵌套函数funB,然后在funA函数内部调用了funB函数。所以当我们调用funA函数时,会输出"123"和"456"。

第二个代码中,funA函数也定义了一个嵌套函数funB,但不同之处在于funA函数返回了funB函数本身,而没有调用它。所以当我们调用funA函数时,只会输出"123",因为并没有执行funB函数。

如果我们想执行funB函数,可以将funA函数的返回值存储在一个变量中,并调用该变量。例如:
result = funA()result()
这样就可以输出"123"和"456"。

总结起来,第一个代码会直接执行funB函数,而第二个代码通过返回函数对象实现了延迟执行的效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 09:10:12 | 显示全部楼层
这两段代码的区别在于第一个代码中的  funA  函数调用了  funB() ,而第二个代码中的  funA  函数返回了  funB  函数对象而没有调用它。

具体解释如下:

第一个代码:
def funA():
    print("123")
    def funB():
        print("456")
    funB()

funA()
在这个代码中, funA  函数定义了一个内部函数  funB ,然后立即调用了  funB() 。运行该代码,会输出:
123
456
funA  函数调用了  funB() ,因此  funB  中的代码被执行,打印了 "456"。

第二个代码:
def funA():
    print("123")
    def funB():
        print("456")
    return funB()

funA()
在这个代码中, funA  函数同样定义了一个内部函数  funB ,但是在  funA  中使用了  return funB() ,因此  funA  函数返回了  funB  函数对象,并没有立即调用  funB() 。运行该代码,会输出:
123
funA  函数被调用,它打印了 "123",但没有调用  funB  函数,因此 "456" 并未打印出来。

综上所述,第一个代码中  funB  被调用并打印了 "456",而第二个代码中  funB  仅在  funA  中被返回,没有被调用,所以只打印了 "123"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 09:14:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hellomyprogram 于 2023-8-2 09:23 编辑

这两个在返回值和实现上没有什么不同:
funA 在两段代码都返回 None
funB 在两段代码也都返回 None
两段代码都会输出 123 456

但是如果 funB 不是返回 None 的话,情况就有所不同。
在第一段代码中,funA 仅仅调用了 funB,而不将 funB 的返回值传输出去。
而第二段代码中,funA 将 funB 的返回值传输出去,因此调用 funA 也会返回 funB 的返回值。

以下是两段代码各自的运行过程:
第一段代码
def funA():
    print("123")
    def funB():
        print("456")
    funB()

funA()

代码行数代码输出备注
1def funA():定义 funA
7funA()调用 funA
7>2print("123")123
7>3def funB():123定义 funB
7>5funB()123调用 funB
7>5>4print("456")123
456
两个函数均返回了 None


第二段代码
def funA():
    print("123")
    def funB():
        print("456")
    return funB()

funA()

代码行数代码输出备注
1def funA():定义 funA
7funA()调用 funA
7>2print("123")123
7>3def funB():123定义 funB
7>5return funB()123返回 funB 的返回值
7>5>4print("456")123
456
funB 返回 None
7>5return funB()123
456
funB 返回 None , funA 会把 funB 的返回值返回,也就是 funA 的返回值就是 funB 的返回值

评分

参与人数 1贡献 +3 收起 理由
歌者文明清理员 + 3

查看全部评分

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

使用道具 举报

 楼主| 发表于 2023-8-2 09:15:26 | 显示全部楼层
不对啊,我两段代码都输出的123和456
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-2 09:22:01 | 显示全部楼层
hellomyprogram 发表于 2023-8-2 09:14
这两个在返回值和实现上没有什么不同:
funA 在两段代码都返回 None
funB 在两段代码也都返回 None

funA 在两段代码都返回 None
funB 在两段代码也都返回 None
这两句话是什么意思啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-2 09:24:09 | 显示全部楼层
本帖最后由 hellomyprogram 于 2023-8-2 09:26 编辑
Orig 发表于 2023-8-2 09:22
funA 在两段代码都返回 None
funB 在两段代码也都返回 None
这两句话是什么意思啊?


在没有写 return 函数的情况下,函数的默认返回值是 None 。
return None 也会返回 None 。
因为 funB 总是返回 None ,所以 funA 无论是否将 funB 的返回值传递出去,都会返回 None 。
return funB()
由于 funB() 是 None ,那么上一行代码变成了
return None
也就返回 None 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 08:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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