cof*_*der 160 python string string-formatting
在学习Python艰难之路第21页,我看到这个代码示例:
x = "There are %d types of people." % 10
...
print "I said: %r." % x
Run Code Online (Sandbox Code Playgroud)
为什么%r
在这里使用而不是%s
?你何时使用%r
,何时使用%s
?
Ben*_*mes 304
该%s
说明符转换使用对象str()
,并%r
使用其转换repr()
.
对于某些对象(如整数),它们会产生相同的结果,但是repr()
特别之处(对于可能的类型),它通常会返回一个有效的Python语法结果,可以用来明确地重新创建它所代表的对象.
这是一个使用日期的例子:
>>> import datetime
>>> d = datetime.date.today()
>>> str(d)
'2011-05-14'
>>> repr(d)
'datetime.date(2011, 5, 14)'
Run Code Online (Sandbox Code Playgroud)
对于该类型repr()
不产生Python语法包括那些指向外部资源,如file
,你不能保证在不同的上下文重新.
man*_*lds 15
%r
显示引号:
它会像:
I said: 'There are 10 types of people.'.
Run Code Online (Sandbox Code Playgroud)
如果你曾经使用%s
它将是:
I said: There are 10 types of people..
Run Code Online (Sandbox Code Playgroud)
Pra*_*hat 15
使用%r
for调试,因为它显示变量的"原始"数据,但其他数据用于向用户显示.
这就是%r
格式化的工作原理; 它以你编写它(或接近它)的方式打印它.这是调试的"原始"格式.这里\n
用来向用户显示不起作用.%r
显示变量的原始数据的表示.
months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %r" % months
Run Code Online (Sandbox Code Playgroud)
输出:
Here are the months: '\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'
Run Code Online (Sandbox Code Playgroud)
从Learn Python the Hard Way中查看此示例.
mac*_*loo 14
这是Ben James答案的一个版本,上面是:
>>> import datetime
>>> x = datetime.date.today()
>>> print x
2013-01-11
>>>
>>>
>>> print "Today's date is %s ..." % x
Today's date is 2013-01-11 ...
>>>
>>> print "Today's date is %r ..." % x
Today's date is datetime.date(2013, 1, 11) ...
>>>
Run Code Online (Sandbox Code Playgroud)
当我跑这个时,它帮助我看到了%r的用处.