在Python中没有“+”运算符的string连接

我正在玩Python,我意识到我们不需要使用“+”运算符来连接string,除非直接使用。

例如:

string1 = 'Hello' 'World' #1 works fine string2 = 'Hello' + 'World' #2 also works fine string3 = 'Hello' string4 = 'World' string5 = string3 string4 #3 causes syntax error string6 = string3 + string4 #4 works fine 

现在我有两个问题:

  1. 为什么陈述3在陈述1不起作用?
  2. 报表1和报表2之间是否有计算速度等技术上的差异?

从文档 :

多个相邻的string文字(用空格分隔),可能使用不同的引用约定,是允许的,它们的含义与它们的连接相同。 因此,“你好”“世界”等同于“helloworld”。


声明3不起作用,因为:

在运行时,必须使用“+”运算符连接stringexpression式。

请注意,文档中的子标题的标题也是“string文字串联”。 这只适用于string文字,而不是其他对象。


可能没有区别。 如果有的话,它可能是非常小的,没有人应该担心。


另外,要明白可能有这样的危险:

 >>> def foo(bar, baz=None): ... return bar ... >>> foo("bob" ... "bill") 'bobbill' 

这是错误永远不会默默通过的完美例子 如果我想要"bill"作为证据呢? 我已经忘记了一个逗号,但没有提出任何错误。 相反,连接已经发生。

回答你的第二个问题:完全没有区别(至less在我使用的实现中)。 反汇编这两个语句,它们呈现为LOAD_CONST STORE_FAST 。 它们是相同的。

你可以使用%s因为这比使用+符号更有效率。

 >>> string2 = "%s %s" %('Hello', 'World') >>> string2 'Hello World' 

(要么)


还有一种方法是.format

 >>> string2 = "{0} {1}".format("Hello", "World") >>> string2 'Hello World' >>> 

这是隐含的string文字串联。 它只发生在string文字,而不是variables或其他expression式评估string。 曾经有一个(微小的)性能差异,但是这些日子里,窥视片优化器应该使得这些forms在本质上是等价的。