我搜索了stackoverflow,但我找不到我要找的答案。抱歉,如果这听起来像一个愚蠢的问题,因为我是一个学习Python的新手。花了1个小时试图理解这一点,我无法理解这个概念。
有人可以向我解释以下内容:
hilarious = False
joke_evaluation = "Isn't that joke so funny?! %r"
print joke_evaluation % hilarious
hilarious = "False"
joke_evaluation = "Isn't that joke so funny?!"
print hilarious + joke_evaluation
为什么你不能将第一个与 + 结合,而%。
是因为在第二个中,它们都是带引号的已定义字符串,但在第一个中,搞笑= False不在引号中?
答案 0 :(得分:2)
字符串上的%运算符并不像+运算符那样完全是串联。
使用%,您实际上用%左侧的字符串中的占位符替换右侧的值。
所以你可以这样:
"This is my %s string" % "fantastic"
会产生:
This is my fantastic string
了解你如何不连接字符串,但是"插入"进入右侧的字符串。
有关详细信息,请参阅documentation。
更新
正如下面的评论所指出,有两个问题"有了这个。从Python 2.5开始,这实际上是" old"做字符串替换的方法。这些天最好采用以下格式(荣誉为asmacdo)
"This is my {adjective} string".format(adjective='fantastic')
同样在评论中(感谢ErlVolton)我应该解释"%s"是指字符串替换。也就是说,放在那里的值应该是一个字符串。类似地,您可以使用整数替换("%d"),十进制浮点替换("%f"),并且,如原始问题的情况,您可以使用"%R&#34 ;.你还可以做更多的格式化(改变浮点数的小数位数,带前导零的填充数等),这在文档中解释得更好。
最后,值得一提的是,您可以将多个值替换为字符串,但这会稍微改变语法。在%运算符之后没有单个值,而是需要使用元组。例如:
"this %s substitutes strings, booleans (%r) and an integer (%d)" % ('string', True, 42)
会产生:
this string substitutes strings, booleans (True) and an integer (42)
答案 1 :(得分:0)
在这种情况下,百分号表示printf样式说明符的开头。当第一个参数是一个字符串时,它使用第二个参数(在这种情况下为布尔值)对其进行格式化。
请参阅documentation,或查看此question。他们应该对这种情况有所了解。
至于加号,你只是不能将一个布尔值添加(或连接)到一个字符串。