什么时候在Python中使用%r而不是%s?
在学习Python困难的方法第21页,我看到这个代码示例:
x = "There are %d types of people." % 10 ... print "I said: %r." % x
为什么%r
在这里用来代替%s
? 你什么时候使用%r
,什么时候使用%s
?
%s
说明符使用str()
转换对象, %r
使用repr()
转换它。
对于某些对象,如整数,它们会得到相同的结果,但repr()
是特殊的(对于可能的types),它通常会返回一个有效的Python语法结果,可以用来明确地重新创build对象代表。
以下是一个使用date的示例:
>>> import datetime >>> d = datetime.date.today() >>> str(d) '2011-05-14' >>> repr(d) 'datetime.date(2011, 5, 14)'
repr()
不能生成Python语法的types包括那些指向外部资源(如file
,不能保证在不同的上下文中重新创build。
使用%r
进行debugging,因为它显示variables的“原始”数据,但是其他用于显示给用户。
这就是%r
格式的工作原理。 它会按照您写入(或接近它)的方式进行打印。 这是debugging的“原始”格式。 这里\n
用于显示给用户不起作用。 %r
表示variables的原始数据。
months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug" print "Here are the months: %r" % months
输出:
Here are the months: '\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'
从Python学习困难的方式检查这个例子 。
%r
用引号显示:
这将是:
I said: 'There are 10 types of people.'.
如果你使用%s
那应该是:
I said: There are 10 types of people..
以上是本詹姆斯的回答:
>>> 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) ... >>>
当我运行这个时,它帮助我看到%r的有用性。