鱼C论坛

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

[已解决]关于pycharm和Idle使用自定义函数时的不同

[复制链接]
发表于 2021-12-25 12:37:56 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 Steven_AgN3 于 2021-12-25 12:39 编辑

如题,我在学习小甲鱼的python课时,按照视频内容自定义了如下函数,该函数在PyCharm中调用时不会打印返回值,在函数执行完成之后直接退出;但是同样的函数在IDLE中执行却可以打印出返回值,请问为何会出现这样的区别,小白问题,请大神指教!
最佳答案
2021-12-25 12:37:57
本帖最后由 阿奇_o 于 2021-12-25 14:21 编辑

交互模式下(IDLE的shell,IPython,Jupyter等),对于类的对象实例,会自动调用 对象实例的 __repr__() 方法。(若没定义__repr__,则"回显"不太易读的代表该对象的"特殊字符形式")
对于函数(也是"对象"),则直接回显函数的返回值。这其实和调用类的实例的__repr__方法,并返回其结果,本质是一样的。

非交互模式下,通常需要通过打印其他绑定的变量,或借助其他函数,才能"打印"出对象的"回显信息",这时调用的是__str__方法。
如 借助print函数,print(obj) 实际打印的是obj.__str__() 的返回结果。

  1. >>> class Test():
  2.         def __str__(self):
  3.                 return "from __str__"
  4.         def __repr__(self):
  5.                 return "from __repr__"

  6.        
  7. >>> t = Test()
  8. >>> t
  9. from __repr__
  10. >>> print(t)
  11. from __str__
  12. >>> t.__str__()
  13. 'from __str__'
  14. >>>
  15. >>> class Test():
  16.         def __str__(self):
  17.                 return "from __str__"

  18.        
  19. >>> t
  20. <__main__.Test object at 0x000001D7BD6D5AC8>
  21. >>>
复制代码

再pycharm中设置的自定义函数

再pycharm中设置的自定义函数

在IDLE中执行可以打印返回值

在IDLE中执行可以打印返回值

最佳答案

查看完整内容

交互模式下(IDLE的shell,IPython,Jupyter等),对于类的对象实例,会自动调用 对象实例的 __repr__() 方法。(若没定义__repr__,则"回显"不太易读的代表该对象的"特殊字符形式") 对于函数(也是"对象"),则直接回显函数的返回值。这其实和调用类的实例的__repr__方法,并返回其结果,本质是一样的。 非交互模式下,通常需要通过打印其他绑定的变量,或借助其他函数,才能"打印"出对象的"回显信息",这时调用的是__str__ ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-25 12:37:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2021-12-25 14:21 编辑

交互模式下(IDLE的shell,IPython,Jupyter等),对于类的对象实例,会自动调用 对象实例的 __repr__() 方法。(若没定义__repr__,则"回显"不太易读的代表该对象的"特殊字符形式")
对于函数(也是"对象"),则直接回显函数的返回值。这其实和调用类的实例的__repr__方法,并返回其结果,本质是一样的。

非交互模式下,通常需要通过打印其他绑定的变量,或借助其他函数,才能"打印"出对象的"回显信息",这时调用的是__str__方法。
如 借助print函数,print(obj) 实际打印的是obj.__str__() 的返回结果。

  1. >>> class Test():
  2.         def __str__(self):
  3.                 return "from __str__"
  4.         def __repr__(self):
  5.                 return "from __repr__"

  6.        
  7. >>> t = Test()
  8. >>> t
  9. from __repr__
  10. >>> print(t)
  11. from __str__
  12. >>> t.__str__()
  13. 'from __str__'
  14. >>>
  15. >>> class Test():
  16.         def __str__(self):
  17.                 return "from __str__"

  18.        
  19. >>> t
  20. <__main__.Test object at 0x000001D7BD6D5AC8>
  21. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-25 12:40:09 From FishC Mobile | 显示全部楼层
shell特性,可以忽视,因为我们从来不在shell下编写正规代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-25 12:54:28 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-12-25 13:51 编辑

  1. print(div(4, 2))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-25 13:09:14 | 显示全部楼层
交互模式下,是一来一回的
你输入指令,它返回结果
文本模式下,只运行,不返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-25 21:48:07 | 显示全部楼层
wp231957 发表于 2021-12-25 12:40
shell特性,可以忽视,因为我们从来不在shell下编写正规代码

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

使用道具 举报

 楼主| 发表于 2021-12-25 21:48:59 | 显示全部楼层
阿奇_o 发表于 2021-12-25 13:58
交互模式下(IDLE的shell,IPython,Jupyter等),对于类的对象实例,会自动调用 对象实例的 __repr__() 方 ...

大神,跟你混
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-25 21:49:10 | 显示全部楼层
nb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-25 21:49:39 | 显示全部楼层
逃兵 发表于 2021-12-25 13:09
交互模式下,是一来一回的
你输入指令,它返回结果
文本模式下,只运行,不返回

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

使用道具 举报

 楼主| 发表于 2021-12-25 21:50:40 | 显示全部楼层

感谢,这个我知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 09:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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