Python的难题 – 练习6 – %r与%s
http://learnpythonthehardway.org/book/ex6.html
Zed似乎在这里可以互换使用%r
和%s
,两者有什么不同吗? 为什么不总是使用%s
?
此外,我不知道在文档中search什么来find更多的信息。 什么是%r
和%s
完全叫? 格式化string?
他们被称为string格式化操作 。
%s和%r之间的区别在于%s使用str
函数,而%r使用repr
函数。 你可以在这个答案中了解str
和repr
之间的区别,但是对于内置types,实践中最大的区别是repr
for strings包含引号,所有特殊字符都被转义。
%r
调用repr
,而%s
调用str
。 对于某些types,这些行为可能会有所不同: repr
返回“对象的可打印表示forms”,而str
返回“对象的良好可打印表示forms”。 例如,对于string它们是不同的:
>>> s = "spam" >>> print(repr(s)) 'spam' >>> print(str(s)) spam
在这种情况下, repr
是一个string(Python解释器可以parsing成一个str
对象)的字面表示,而str
只是string的内容。
%s
调用str()
,而%r
调用repr()
。 有关详细信息,请参阅Python中的__str__和__repr__之间的区别
以下是前面三个代码示例的总结。
# First Example s = 'spam' # "repr" returns a printable representation of an object, # which means the quote marks will also be printed. print(repr(s)) # 'spam' # "str" returns a nicely printable representation of an # object, which means the quote marks are not included. print(str(s)) # spam # Second Example. x = "example" print ("My %r" %x) # My 'example' # Note that the original double quotes now appear as single quotes. print ("My %s" %x) # My example # Third Example. x = 'xxx' withR = ("Prints with quotes: %r" %x) withS = ("Prints without quotes: %s" %x) print(withR) # Prints with quotes: 'xxx' print(withS) # Prints without quotes: xxx
x = "example" print "My %s"%x My example print "My %r"%x My 'example'
上面的答案很好的解释了这个问题。 我试图用一个简单的例子来展示。
%s
=>string
%r
=>完全如此
使用书中的代码:
my_name = 'Zed A. Shaw' print "Let's talk about %s." % my_name print "Let's talk about %r." % my_name
我们得到
Let's talk about Zed A. Shaw. Let's talk about 'Zed A. Shaw'.
下面的代码说明了区别。 相同的值打印不同:
x = "xxx" withR = "prints with quotes %r" withS = "prints without quotes %s"