在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
现在我有两个问题:
- 为什么陈述3在陈述1不起作用?
- 报表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在本质上是等价的。