You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中str(repr(p))与print(repr(p))输出结果不同的原因是什么

问题核心原因梳理

  1. print()函数的返回值不是输出内容
    print()的作用是将传入内容打印到控制台,它本身的返回值永远是None。你赋值的x = print(repr(p))中,x的取值是None,而非打印出来的<__main__.Person object at 0x0000021D032392E0>这段文本,所以x == y返回False是完全正常的,和str、repr的实现逻辑没有关系。

  2. 交互式解释器的隐式输出规则干扰了你的判断
    你观察到的两个输出差异,本质是展示方式不同,不是内容不同:

  • repr(p)的返回值本身就是字符串,内容为不带引号的<__main__.Person object at 0x0000021D032392E0>
  • 对字符串调用str()会直接返回字符串本身,所以str(repr(p))和repr(p)的内容完全一致
  • 你在交互式解释器里直接输入str(repr(p))回车后看到的带单引号的结果,是因为交互式解释器会对所有表达式的返回值隐式调用repr()再输出:repr(repr(p))的结果就是给原字符串套了一层单引号,也就是你看到的'<__main__.Person object at 0x0000021D032392E0>'
  1. print()的输出没有额外加工
    print()接收参数后,会直接输出参数转为字符串后的内容,对字符串参数不会额外加引号,也不会调用repr(),所以print(repr(p))就直接输出了repr(p)本身的内容,也就是不带引号的那段文本。

你以为的print(repr(p))和str(repr(p))的逻辑差异根本不存在,二者的实际内容完全相同,只是交互式解释器的隐式repr行为导致你看到的展示结果不一样。

内容的提问来源于stack exchange,提问作者Nameless

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:24:05