鱼C论坛

 找回密码
 立即注册
查看: 1989|回复: 9

[已解决]请大家看看关于代码的理解是否准确

[复制链接]
发表于 2023-6-27 06:58:23 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wbzxz 于 2023-6-27 07:30 编辑
def funA(fun):
    print('下面开始调用')
    fun()

def myfunc():
    print('我是myfunc函数')

print(myfunc())
myfunc = funA(myfunc)
print(myfunc)
print(type(myfunc))
print(myfunc())

上面代码的运行结果与分析如下:


1.   第8条语句  print(myfunc()) 运行结果如下
我是myfunc函数
None
(分析:输出“我是myfunc函数”是myfunc()的运行结果, 由于使用了print语句,但是有没有返回值,print语句只好打印出None)

2. 第9条语句 myfunc = funA(myfunc)运行结果如下
我是myfunc函数
(分析:首先是myfunc函数作为参数传递给了funA,依次打印了“下面开始调用“,”我是myfunc函数”两条语句,然后是把funA函数的返回值赋值给myfunc变量)


3.第10条语句print(myfunc)运行结果如下
None
(分析:打印myfunc变量,由于myfunc变量来源于上一条语句funA函数的返回值,funA函数由于没有返回值,所以myfunc变量是个空值,所以是None)

4.第11条语句 print(type(myfunc))运行结果如下
<class 'NoneType'>
(分析:由于myfunc变量是None,所以类型也是None)

5.第12条语句 print(myfunc()) 运行结果如下
Traceback (most recent call last):
      print(myfunc())
TypeError: 'NoneType' object is not callable
(分析:这条语句先是myfunc()函数,然后再打印出来。由于myfunc已经变成了变量,不再是函数,所以出错啦。)


请问各位老师,我的分析是否准确,还有哪些理解上的错误?
最佳答案
2023-6-27 09:52:21
你对代码的分析大致正确,但有几个理解上的错误。下面是对你的代码分析的一些补充和修正:

第8条语句print(myfunc())运行结果如下:
我是myfunc函数
None
(分析:首先打印出了"我是myfunc函数",这是因为调用了myfunc()函数。然后,因为myfunc()函数没有返回值,所以打印结果为None)

第9条语句myfunc = funA(myfunc)运行结果如下:
下面开始调用
我是myfunc函数
(分析:首先,将myfunc作为参数传递给了funA函数。在funA函数中,先打印了"下面开始调用",然后调用了fun(),即myfunc(),打印了"我是myfunc函数"。最后,将funA函数的返回值(即None)赋值给了myfunc变量)

第10条语句print(myfunc)运行结果如下:
None
(分析:因为myfunc变量是funA函数的返回值,而funA函数没有返回值,所以myfunc变量的值为None)

第11条语句print(type(myfunc))运行结果如下:
<class 'NoneType'>
(分析:因为myfunc变量的值是None,所以其类型为NoneType)

第12条语句print(myfunc())运行结果如下:
Traceback (most recent call last):
  File "example.py", line 11, in <module>
    print(myfunc())
TypeError: 'NoneType' object is not callable
(分析:由于myfunc变量的值是None,而None类型的对象不可调用,所以在尝试调用myfunc()时会引发TypeError错误)

希望以上解释对你有所帮助。如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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,所以无法再被调用为函数。

点评

我很赞同!: 5.0
我很赞同!: 5
非常感谢您的指点!  发表于 2023-6-27 13:43
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-27 07:25:28 | 显示全部楼层
本帖最后由 wbzxz 于 2023-6-27 07:31 编辑
青出于蓝 发表于 2023-6-27 07:16
你的分析基本上是正确的,但有几个小问题需要修正:

1   第8条语句 print(myfunc()) 的输出结果只会是  ...


您好,我用pycharm,运行结果就是这个,和您的运行结果不一样啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 07:41:42 | 显示全部楼层
wbzxz 发表于 2023-6-27 07:25
您好,我用pycharm,运行结果就是这个,和您的运行结果不一样啊。

输出结果应为
我是myfunc函数
None
下面开始调用
我是myfunc函数
None
<class 'NoneType'>
Traceback (most recent call last):
  File "C:/Users/shuoguo-win10/Desktop/1111.py", line 12, in <module>
    print(myfunc())
TypeError: 'NoneType' object is not callable

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

使用道具 举报

发表于 2023-6-27 09:28:09 From FishC Mobile | 显示全部楼层
wbzxz 发表于 2023-6-27 07:25
您好,我用pycharm,运行结果就是这个,和您的运行结果不一样啊。

因为他分析错的啊 funA根本就没有返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 09:28:11 | 显示全部楼层
你的分析基本上是正确的。下面是对于每个步骤的更详细的解释:

1. 第8条语句  print(myfunc())  :此语句调用函数 myfunc() 并打印其返回值。由于函数 myfunc() 没有 return 语句,因此它的返回值是 None 。函数的内容 print('我是myfunc函数') 在执行过程中打印了 '我是myfunc函数',所以你在控制台看到这个输出。然后 print(myfunc()) 语句打印的是 myfunc() 的返回值,即 None 。

2. 第9条语句  myfunc = funA(myfunc) :此语句首先把 myfunc 函数作为参数传递给 funA ,然后在 funA 内部调用这个函数(打印了 "我是myfunc函数")。然后这个语句将 funA(myfunc) 的返回值赋值给 myfunc 。但是,由于 funA 没有返回值,所以这里的 myfunc 变量被赋值为 None 。

3. 第10条语句  print(myfunc) :此语句打印 myfunc 变量的值,由于 myfunc 已经被赋值为 None ,所以打印出 None 。

4. 第11条语句  print(type(myfunc)) :此语句打印 myfunc 变量的类型。由于 myfunc 现在是 None ,所以它的类型是 NoneType 。

5. 第12条语句  print(myfunc()) :这里试图调用 myfunc() ,然后打印返回值。但是,由于现在的 myfunc 已经是一个 NoneType 变量,不再是函数,所以你不能调用它,因此报错"TypeError: 'NoneType' object is not callable"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 09:52:21 | 显示全部楼层    本楼为最佳答案   
你对代码的分析大致正确,但有几个理解上的错误。下面是对你的代码分析的一些补充和修正:

第8条语句print(myfunc())运行结果如下:
我是myfunc函数
None
(分析:首先打印出了"我是myfunc函数",这是因为调用了myfunc()函数。然后,因为myfunc()函数没有返回值,所以打印结果为None)

第9条语句myfunc = funA(myfunc)运行结果如下:
下面开始调用
我是myfunc函数
(分析:首先,将myfunc作为参数传递给了funA函数。在funA函数中,先打印了"下面开始调用",然后调用了fun(),即myfunc(),打印了"我是myfunc函数"。最后,将funA函数的返回值(即None)赋值给了myfunc变量)

第10条语句print(myfunc)运行结果如下:
None
(分析:因为myfunc变量是funA函数的返回值,而funA函数没有返回值,所以myfunc变量的值为None)

第11条语句print(type(myfunc))运行结果如下:
<class 'NoneType'>
(分析:因为myfunc变量的值是None,所以其类型为NoneType)

第12条语句print(myfunc())运行结果如下:
Traceback (most recent call last):
  File "example.py", line 11, in <module>
    print(myfunc())
TypeError: 'NoneType' object is not callable
(分析:由于myfunc变量的值是None,而None类型的对象不可调用,所以在尝试调用myfunc()时会引发TypeError错误)

希望以上解释对你有所帮助。如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-27 13:46:31 | 显示全部楼层
歌者文明清理员 发表于 2023-6-27 09:52
你对代码的分析大致正确,但有几个理解上的错误。下面是对你的代码分析的一些补充和修正:

第8条语句pri ...

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

使用道具 举报

发表于 2023-6-27 14:23:13 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 03:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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