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函数。 你可以在这个答案中了解strrepr之间的区别,但是对于内置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"