关于内嵌函数
自己写了两段代码,第一段是def fun1(x):
def fun2(y):
def fun3(z):
print(x*y*z)
return fun3
return fun2
这一段代码可以正常运行。后来我修改了一下:
def fun1(x):
def fun2(y):
def fun3(z):
return(x*y*z)
return fun2
就报错了,错误是:
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
fun1(5)(6)(6)
TypeError: 'NoneType' object is not callable
这个是什么问题? 没有返回 fun3即 fun1(5)(6) 这是没有返回值的,然后执行fun1(5)(6)(6) 就出错 NoneType 对象不能被调用 因为你的fun2没有返回可执行函数,所以只能写fun1(5)(6),而不能再写一个括号 sunrise085 发表于 2020-8-28 14:36
因为你的fun2没有返回可执行函数,所以只能写fun1(5)(6),而不能再写一个括号
就是说在这里return(x*y*z)和return fun2是不一样的对吗?这两个是哪里不一样呢?
pejayang 发表于 2020-8-31 08:52
就是说在这里return(x*y*z)和return fun2是不一样的对吗?这两个是哪里不一样呢?
你再仔细看看你的第二段程序,你的第二段程序的fun2根本没有任何执行语句哎!!
fun2中只有fun3函数的定义,根本没有任何执行语句
第一段程序中的fun2有一句执行语句,就是return fun3,相当于返回了函数fun3的函数体
将程序写成如下形式,才能执行fun1(5)(6)(6),第一个括号是fun1的参数,相当于fun2(6)(6),下一个括号是fun2的参数,相当于fun3(6),然后返回的是fun3内的执行语句 return (x*y*z),即5*6*6的结果
def fun1(x):
def fun2(y):
def fun3(z):
return(x*y*z)
return fun3
return fun2
页:
[1]