2012-07-19 150 views
84

在蟒蛇说,你有串联字符串和整数蟒蛇

s = "string" 
i = 0 
print s+i 

会给你错误 所以你写

print s+str(i) 

不出现错误。

我认为这是一个笨拙的方式来处理int和字符串连接。 即使Java并不需要显式强制转换为字符串来执行这种排序 的串联。 有没有更好的方法来做这种连接,即没有在Python中进行显式转换?

+7

这是因为Python是强类型(https://en.wikipedia.org/wiki/Strong_typing)语言(东西,谷歌了解更多:))。 – mouad 2012-07-19 10:44:58

+3

这会导致含糊不清。 “1”+ 1“,”2“或”11“的结果是什么?为什么? – Buddy 2012-07-19 11:02:25

+1

好友我不确定你在想什么,但请不要假设。我的问题是连接2个不同的对象类型,我找到了解决方案。我不知道你在python中编程了多少,但是你有没有试过连接两个字符串只在其中一个是None类型时才会出错?你可以做明确的检查亚,但这只是额外的代码。当你需要记录错误时,这种事情是必需的。 – specialscope 2012-09-19 04:48:00

回答

104

现代字符串格式化:

"{} and {}".format("string", 1) 
+2

感谢这个很好的方式来做到这一点。 – specialscope 2012-07-19 10:48:05

+0

只是为了后代,因为事情在过去发生了变化,未来可能会发生变化:这是哪个版本的“现代”? – jvriesem 2018-02-09 23:08:36

23

字符串格式化,使用新型.format()方法(使用默认值.format()提供):

'{}{}'.format(s, i) 

或者上了年纪,但 “还在坚持围绕”,% -formatting:

'%s%d' %(s, i) 

在上面的两个例子中都有没有这两个项目之间的空格连接在一起。如果需要空间,它可以简单地添加在格式字符串中。

这些提供了一个lot关于如何连接项目,他们之间的空间等的控制和灵活性。关于format specifications see this的详细信息。

69

没有字符串格式化:

>> print 'Foo',0 
Foo 0 
+2

这对打印效果很好,但不能作为字符串分配给变量。它给出了Set对象。 – specialscope 2012-07-19 10:49:31

+1

除非您使用v3'print()'*函数*并设置它的某些参数,否则它还会在两个项目之间留有额外空白。 – Levon 2012-07-19 10:59:03

10

的Python是一个有趣的语言,而通常有一个(或两个)“显而易见”的方式来完成任何给定任务,灵活性依然存在。

s = "string" 
i = 0 

print (s + repr(i)) 

上面的代码片段是用Python3语法,但印刷后的括号总是允许(可选),直到第3版使他们强制性的。

希望这会有所帮助。

凯特琳