Python中str(repr(p))与print(repr(p))输出结果不同的原因是什么
问题核心原因梳理
print()函数的返回值不是输出内容print()的作用是将传入内容打印到控制台,它本身的返回值永远是None。你赋值的x = print(repr(p))中,x的取值是None,而非打印出来的<__main__.Person object at 0x0000021D032392E0>这段文本,所以x == y返回False是完全正常的,和str、repr的实现逻辑没有关系。交互式解释器的隐式输出规则干扰了你的判断
你观察到的两个输出差异,本质是展示方式不同,不是内容不同:
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>'
print()的输出没有额外加工print()接收参数后,会直接输出参数转为字符串后的内容,对字符串参数不会额外加引号,也不会调用repr(),所以print(repr(p))就直接输出了repr(p)本身的内容,也就是不带引号的那段文本。
你以为的print(repr(p))和str(repr(p))的逻辑差异根本不存在,二者的实际内容完全相同,只是交互式解释器的隐式repr行为导致你看到的展示结果不一样。
内容的提问来源于stack exchange,提问作者Nameless
相关产品推荐
相关产品推荐

