鱼C论坛

 找回密码
 立即注册
查看: 1498|回复: 1

[已解决]请帮我看一下两段代码的区别谢谢

[复制链接]
发表于 2020-7-14 18:50:52 | 显示全部楼层 |阅读模式

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

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

x
第一段代码
def mum():
        def dad():
                print('你妈妈又生气了')
        return dad()
mum()
第二段代码
def mum():
        def dad():
                print('你妈妈又生气了')
        return dad
mum()()

为什么第二段里return dad少了一个括号,后边调用mum函数时就必须写2个()才能输出?
最佳答案
2020-7-14 18:57:17
本帖最后由 Twilight6 于 2020-7-14 18:58 编辑

首先你要知道 , 当一个函数名不带括号 , 那么就是指这个函数体

当一个函数名带上括号 , 那么就是指这个函数的调用结果

然后我们来分析代码:

第一个代码 , 我们可以看到 , 调用了 mum() 函数 , 那么返回的就是函数的运行结果 , 而 return 返回的又是个 dad() 函数的运行结果

则此时调用 mum() 就相对于调用了 dad() , 而 dad() 函数没有设置返回值 , 那么Python 会默认返回一个 None


第二个代码 mum()() , 你可以这样看 , 先调用的是 mum() 函数 , 返回了 dad 函数名

然后就等价于 dad() 调用 dad 函数 , 你如果此时给这个函数赋值 , 还能达到另一种效果

比如如果你先 a = mum() 这样调用赋值 , 那么这个时候 mum() 返回的是 dad 函数 , 这里就等价于 a = dad , 如果后面你调用 a() 那么就等价于调用 dad()


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

使用道具 举报

发表于 2020-7-14 18:57:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-14 18:58 编辑

首先你要知道 , 当一个函数名不带括号 , 那么就是指这个函数体

当一个函数名带上括号 , 那么就是指这个函数的调用结果

然后我们来分析代码:

第一个代码 , 我们可以看到 , 调用了 mum() 函数 , 那么返回的就是函数的运行结果 , 而 return 返回的又是个 dad() 函数的运行结果

则此时调用 mum() 就相对于调用了 dad() , 而 dad() 函数没有设置返回值 , 那么Python 会默认返回一个 None


第二个代码 mum()() , 你可以这样看 , 先调用的是 mum() 函数 , 返回了 dad 函数名

然后就等价于 dad() 调用 dad 函数 , 你如果此时给这个函数赋值 , 还能达到另一种效果

比如如果你先 a = mum() 这样调用赋值 , 那么这个时候 mum() 返回的是 dad 函数 , 这里就等价于 a = dad , 如果后面你调用 a() 那么就等价于调用 dad()


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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