所以我有这样的代码:
formatter = "%r %r %r %r"
print formatter % (1, 2, 3, 4)
print formatter % ("one", "two", "three", "four")
我得到这个输出:
1 2 3 4
"一"二"三"四"
我的问题是:
为什么输出的第二行有单引号?我不太确定%r转换类型是如何真正工作的。
当我将代码改为:
formatter = "%r %r %r %r"
print formatter % (1, 2, 3, 4)
print "%s %s %s %s" % ("one", "two", "three", "four")
我得到这样的结果:
1 2 3 4
一二三四
我就是不明白为什么它们的工作方式不同。有人能给我解释一下吗?
I've read:
http://docs.python.org/library/stdtypes.html和
http://docs.python.org/library/functions.html repr
表示'abc%rdef' % obj
,将部分'%r'
替换为repr(obj)
用表达式'ABC%sDEF' % obj
,将部分'%s'
替换为str(obj)
.
repr()是一个函数,对于普通对象,它返回一个字符串,该字符串与您在脚本中定义作为参数传递给repr()函数的对象相同:
对于许多类型,该函数尝试返回一个string对象在传递给eval()时会产生一个具有相同值的对象http://docs.python.org/library/functions.html repr
.
示例1
如果考虑li = [12,45,'haze']
print li
将打印[12,45,'haze']
print repr(li)
也将打印[12,45,'haze'],因为[12,45,'haze']
是在脚本中用来定义列表li的字符序列,它的值为
示例2
如果考虑ss = 'oregon'
定义的字符串:
print ss
将打印oregon,不带引号
print repr(ss)
将打印'oregon',因为如果您想在程序
'oregon'
是必须在脚本中编写的字符序列。.
所以,这意味着,事实上,对于普通对象,repr()和str()返回的字符串一般是相等的,除了字符串对象。这使得repr()对于字符串对象来说特别有趣。分析HTML代码的内容非常有用,例如
%s
告诉python在元组的每个元素上调用str()
函数。%r
告诉python在元组的每个元素上调用repr()
函数。
By the docs:
str ():
repr ():返回一个包含的字符串,很好地可打印对象的表示。对于字符串,这将返回字符串本身本身。
返回一个字符串,其中包含对象的可打印的表示形式。
这意味着,如果你调用repr()
的对象是一个字符串对象(在python中一切都是对象),它会显示不同字符是如何表示的。
@你的具体问题:我假设"…"表示,它是一个字符串。如果在int类型上调用repr(),则没有"…"