2016-06-13 71 views
0

我最近开始学习python,不明白%r和%s。两者有什么区别?类比将不胜感激。我试图解决问题,看看这两者是如何工作的。我创建了简单的代码来理解python中的字符串,但它似乎不起作用。下面的代码有什么问题,以及这样做的正确方法是什么?你也可以一步步显示你在正确的代码中做什么?感谢您帮助业余学习python。了解%r和%s

formatter = "%r %r %r %r" 
print "Here are the days: formatter" % ('Monday','Tuesday','Wednesday','Thursday') 
+1

你把'formatter'作为一个字符串而不是变量,这就是为什么可能不起作用,所以'print formatter%(...)' –

+0

@John Smith你的代码工作正常,正如cricket_007指出的那样你只需要使用'formatter'作为变量:'print“下面是几天:”,formatter%('Monday','Tuesday','Wednesday','Thursday')' – davedwards

回答

0

与你代码的问题是,你是不是添加formatter varibale字符串,但文字字符串。要解决这一点:

formatter = "%r %r %r %r" 
print "Here are the days: " + formatter % ('Monday','Tuesday','Wednesday','Thursday') 

现在关于%s%r:不同的是,这%r使用__repr__方法您的对象转换为字符串并%s使用__str__。有关的__repr____str__的区别深入的信息,你可以看看这个答案:https://stackoverflow.com/a/2626364/5189673

而且该格式只取元组的元素,使用他们的__repr__(如%r时)将它们转换为一个字符串然后用取得的字符串替换%r

0

在您例如%s%r之间的区别是

>>> print "Here are the days: %s %s %s %s" % ('Monday', ... 
Here are the days: Monday Tuesday Wednesday Thursday 

VS

>>> print "Here are the days: %r %r %r %r" % ('Monday', ... 
Here are the days: 'Monday' 'Tuesday' 'Wednesday' 'Thursday' 

注意引号表示在%r例如一个字符串。一般来说,当你希望输出是有效的python时,使用repr转换(即%r)。这可能是因为您想输出eval,或者您可能希望保存输出以便稍后进行评估。