%r用rper()方法处理对象
%s用str()方法处理对象
有些情况下,两者处理的结果是一样的,比如说处理int型对象。
And:
%r 调用 rper函数打印字符串,repr函数返回的字符串是加上了转义序列,是直接书写的字符串的形式
%s 调用 str函数打印字符串,str函数返回原始字符串
例一:
print "I am %d years old." % 22 print "I am %s years old." % 22 print "I am %r years old." % 22
返回结果:
I am 22 years old. I am 22 years old. I am 22 years old.
另外一些情况两者就不同了
例二:
text = "I am %d years old." % 22 print "I said: %s." % text print "I said: %r." % text
返回结果:
I said: I am 22 years old.. I said: 'I am 22 years old.'. // %r 给字符串加了单引号
再看一种情况
例三:
import datetime d = datetime.date.today() print "%s" % d print "%r" % d
返回结果:
2014-04-14 datetime.date(2014, 4, 14)
可见,%r打印时能够重现它所代表的对象(rper() unambiguously recreate the object it represents)
2017年7月2日更新
我应该使用 %s 还是 %r?
你应该使用 %s,只有在想要获取某些东西的 debug 信息时才能用到 %r。 %r 给你的是变量的 “程序员原始版本”,又被称作“representation”。
为什么 “one” 要用引号,而 True 和 False 不需要? 因为 True 和 False 是 Python 的关键字,用来表示真假的意义。如果你加了引号,它们就变成 了字符串,也就无法实现它们本来的功能了。
使用了 %r 后转义序列都不灵了。 因为 %r 打印出的是你写到代码里的原始字符串,其中会包含原始的转义字符。你应该使用 %s, 记住这条:``%r`` 用作 debug,``%s`` 用作显示。
如果您觉得本文还不错,可以点击下面赞赏我们!