请帮我看一下两段代码的区别谢谢
第一段代码def mum():
def dad():
print('你妈妈又生气了')
return dad()
mum()
第二段代码
def mum():
def dad():
print('你妈妈又生气了')
return dad
mum()()
为什么第二段里return dad少了一个括号,后边调用mum函数时就必须写2个()才能输出? 本帖最后由 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()
页:
[1]