|
发表于 2023-6-27 07:16:52
|
显示全部楼层
你的分析基本上是正确的,但有几个小问题需要修正:
1 第8条语句 print(myfunc()) 的输出结果只会是 "我是myfunc函数",而不会再打印出 "None"。根据代码分析,myfunc() 函数被调用并打印了相应的输出,但是由于该函数没有返回值,所以 print(myfunc()) 语句会打印出 None。
2 第10条语句 print(myfunc) 打印的结果应该是 <function funA at 0x...>,而不是 "None"。这是因为在第9条语句中,你将 myfunc 变量重新赋值为 funA(myfunc) 的返回值。在这种情况下,myfunc 成为 funA 函数的引用。因此,打印 myfunc 变量将显示函数的信息。
3 第11条语句 print(type(myfunc)) 的输出应该是 <class 'function'>,而不是 "<class 'NoneType'>"。由于在第9条语句中,myfunc 变量被重新赋值为 funA(myfunc) 的返回值,因此它仍然是一个函数对象,而不是 None。
4 第12条语句 print(myfunc()) 会引发异常,因为前面的操作已经将 myfunc 变量重新赋值为 funA(myfunc) 的返回值,即 None。因此,尝试调用 myfunc() 会引发 TypeError,提示 "'NoneType' object is not callable"。
修正后的代码运行结果和分析如下:
输出结果:
- 下面开始调用
- 我是myfunc函数
- None
- <function funA at 0x...>
- <class 'function'>
- Traceback (most recent call last):
- File "<filename>", line 12, in <module>
- TypeError: 'NoneType' object is not callable
复制代码
分析:
1 第8条语句 print(myfunc()),输出 "我是myfunc函数",没有返回值,打印出 None。
2 第9条语句 myfunc = funA(myfunc),首先将 myfunc 函数作为参数传递给 funA 函数。在 funA 函数内部,先打印 "下面开始调用",然后调用传入的函数 fun(),即 myfunc()。再打印 "我是myfunc函数"。由于 funA 函数没有返回值,所以 myfunc 变量被赋值为 None。
3 第10条语句 print(myfunc),输出 <function funA at 0x...>,因为 myfunc 变量重新赋值为 funA(myfunc) 的返回值,即 <function funA at 0x...>。
4 第11条语句 print(type(myfunc)),输出 <class 'function'>,由于 myfunc 变量仍然是一个函数对象,所以类型是 <class 'function'>。
5 第12条语句 print(myfunc()),引发 TypeError 异常,提示 "'NoneType' object is not callable"。这是因为 myfunc 变量已经被重新赋值为 None,所以无法再被调用为函数。
|
|