理解 Python 中的 repr() 函数
- 2024-12-12 08:41:00
- admin 原创
- 65
问题描述:
repr()
:对象的可评估字符串表示形式(可以对其进行“eval()”,这意味着它是一个可评估为 Python 对象的字符串表示形式)
换句话说:
>>> x = 'foo'
>>> repr(x)
"'foo'"
问题:
为什么我这样做时会出现双引号
repr(x)
?(我这样做时没有得到它们str(x)
)'foo'
为什么我这样做时得到的eval("'foo'")
不是对象 x ?
解决方案 1:
>>> x = 'foo'
>>> x
'foo'
因此名称x
附加到'foo'
字符串。例如,当您调用时,repr(x)
解释器会放入'foo'
而x
不是 然后调用repr('foo')
。
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
`__repr__实际上调用的魔术方法
x,该方法给出包含赋值表示的字符串**。**因此它在字符串中返回。的想法是给出一个包含一系列符号的字符串,我们可以在解释器中输入这些符号并获取与作为 参数发送的相同值。
'foo'x
'foo'""
"'foo'"repr
repr`
>>> eval("'foo'")
'foo'
当我们调用 时eval("'foo'")
,就和我们在解释器中输入一样。就像我们直接在解释器中'foo'
输入外部字符串的内容一样。""
>>> eval('foo')
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eval('foo')
File "<string>", line 1, in <module>
NameError: name 'foo' is not defined
如果我们调用eval('foo')
,它和我们在解释器中输入的一样foo
。但是没有foo
可用的变量,并且会引发异常。
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str
只是对象的字符串表示形式(记住,x
变量指的是'foo'
),所以此函数返回字符串。
>>> str(5)
'5'
整数的字符串表示形式5
是'5'
。
>>> str('foo')
'foo'
和字符串的字符串表示形式'foo'
是相同的字符串'foo'
。
解决方案 2:
交互式解释器上获得的反馈repr
也会使用。当您输入表达式(假设为expr
)时,解释器基本上会执行result = expr; if result is not None: print repr(result)
。因此,示例中的第二行将字符串格式化为foo
所需的表示形式('foo'
)。然后解释器创建该 的repr
表示形式,并留下双引号。
为什么当我将 %r 与双引号和单引号转义结合起来并将它们打印出来时,它会按照我在 .py 文件中编写的方式打印出来,而不是按照我希望看到的方式打印出来?
我不确定你在这里问的是什么。文本single ' and double " quotes
在运行 时repr
包含一种引号的转义符。当然有,否则根据 Python 规则它就不是有效的字符串文字。这正是你通过调用 所要求的repr
。
还请注意,eval(repr(x)) == x
类比不是字面意思。它是一种近似,适用于大多数(所有?)内置类型,但最重要的是,通过查看输出,您可以很好地了解类型和逻辑“值” repr
。
解决方案 3:
str()
用于为最终用户创建输出,repr()
用于在开发过程中进行调试。它是对象的官方表示。
例子:
>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
'2018-04-08 18:00:15.178404'
>>> repr(today)
'datetime.datetime(2018, 4, 8, 18, 3, 21, 167886)'
从输出中我们看到repr()
显示了日期对象的官方表示。
解决方案 4:
1) 的结果repr('foo')
是字符串 'foo'
。在 Python shell 中,表达式的结果也表示为表示形式,因此您本质上看到的是repr(repr('foo'))
。
2)eval
计算表达式的结果。结果始终是一个值(例如数字、字符串或对象)。多个变量可以引用同一个值,例如:
x = 'foo'
y = x
x 和 y 现在指的是同一个值。
3) 我不明白你的意思。你能发个例子,说明一下你想看什么吗?
解决方案 5:
当你说
foo = 'bar'
baz(foo)
您没有传递foo
给baz
函数。 foo
只是一个用来表示值的名称,在本例中'bar'
,并且该值被传递给函数baz
。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件