repr():对象的可评估字符串表示形式(可以"eval()"它,这意味着它是一个求值为Python对象的字符串表示形式)
换一种说法:
>>> x = 'foo'
>>> repr(x)
"'foo'"
Run Code Online (Sandbox Code Playgroud)
问题:
repr(x)?(当我这样做时,我不会得到它们str(x))'foo'在做的时候会得到eval("'foo'")而不是x那个对象?ovg*_*vin 159
>>> x = 'foo'
>>> x
'foo'
Run Code Online (Sandbox Code Playgroud)
所以名称x附加到'foo'字符串.例如repr(x),当您调用解释器'foo'而不是x然后调用时repr('foo').
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
Run Code Online (Sandbox Code Playgroud)
repr实际调用一个魔术方法__repr__的x,这给串包含该值的表示'foo'分配给x.因此,它返回'foo'的字符串中""产生"'foo'".我们的想法repr是给出一个包含一系列符号的字符串,我们可以在解释器中输入这些符号,并获得作为参数发送的相同值repr.
>>> eval("'foo'")
'foo'
Run Code Online (Sandbox Code Playgroud)
当我们打电话时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
Run Code Online (Sandbox Code Playgroud)
如果我们打电话eval('foo'),它就像我们foo在解释器中输入一样.但是没有foo可用的变量,并且引发了异常.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
Run Code Online (Sandbox Code Playgroud)
str只是对象的字符串表示(记住,x变量引用'foo'),所以这个函数返回字符串.
>>> str(5)
'5'
Run Code Online (Sandbox Code Playgroud)
整数字符串5是'5'.
>>> str('foo')
'foo'
Run Code Online (Sandbox Code Playgroud)
字符串表示字符串'foo'是相同的字符串'foo'.
小智 10
您在交互式解释器上获得的反馈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输出中获得了类型和逻辑"值"的相当好的概念.
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)'
Run Code Online (Sandbox Code Playgroud)
从输出中我们看到 repr() 显示了日期对象的官方表示。
| 归档时间: |
|
| 查看次数: |
177099 次 |
| 最近记录: |