不明白%

时间:2014-11-07 02:03:28

标签: python variables

我搜索了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不在引号中?

2 个答案:

答案 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。他们应该对这种情况有所了解。

至于加号,你只是不能将一个布尔值添加(或连接)到一个字符串。