Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Don';我不明白为什么_Python_Variables - Fatal编程技术网

Python Don';我不明白为什么

Python Don';我不明白为什么,python,variables,Python,Variables,我已经搜索了stackoverflow,但找不到我正在寻找的答案。抱歉,如果这听起来像一个愚蠢的问题,因为我是一个学习Python的新手。我花了一个小时试图理解这一点,但我无法理解这个概念 谁能给我解释一下: hilarious = False joke_evaluation = "Isn't that joke so funny?! %r" print joke_evaluation % hilarious hilarious = "False" joke_evaluation = "I

我已经搜索了stackoverflow,但找不到我正在寻找的答案。抱歉,如果这听起来像一个愚蠢的问题,因为我是一个学习Python的新手。我花了一个小时试图理解这一点,但我无法理解这个概念

谁能给我解释一下:

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
为什么不能将第一个与+组合,而将%组合


这是因为在第二种情况下,它们都是带引号的定义字符串,但在第一种情况下,Hilary=False不在引号中吗?

在这种情况下,百分号标记printf样式说明符的开始。当第一个参数是字符串时,它使用第二个参数(本例中为布尔值)对其进行格式化

请参阅,或查看此。他们应该对形势有所了解


至于加号,您不能简单地向字符串添加(或concat)布尔值。

字符串上的%运算符与+运算符不同,它不是完全的串联运算符

使用%时,实际上是将%左侧字符串中的占位符替换为右侧的值

所以你可以有这样的东西:

"This is my %s string" % "fantastic"
将产生:

This is my fantastic string
this string substitutes strings, booleans (True) and an integer (42)
了解如何不连接字符串,而是“插入”右侧的字符串

有关更多详细信息,请参阅

更新:

正如下面的评论所指出的,这有两个“问题”。从Python2.5开始,这实际上是执行字符串替换的“旧”方法。如今,以下格式是首选(值得称赞)

同样在评论中(谢谢),我应该解释一下“%s”指的是字符串替换。也就是说,放入其中的值应该是一个字符串。类似地,您可以使用整数替换(“%d”)、十进制浮点替换(“%f”),并且与原始问题一样,您可以使用“%r”替换布尔值。您还可以进行更多的格式化(改变浮点数的小数位数、带前导零的填充数字等),文档中对此进行了更好的解释

最后,值得一提的是,您可以将多个值替换为一个字符串,但这会稍微改变语法。您需要使用元组,而不是在%运算符后面有一个值。例如:

"this %s substitutes strings, booleans (%r) and an integer (%d)" % ('string', True, 42)
将产生:

This is my fantastic string
this string substitutes strings, booleans (True) and an integer (42)

这可能是正确的,但应该注意,这不是进行字符串格式化的首选方法,除非您需要能够使用2.5。“这是我的{形容词}字符串。首选格式(形容词='fantastic')。您应该更新您的答案,说明格式也会进行隐式类型转换,
“foo”+4
将失败,而
“foo%d”%4
则不会。