连接运算符+或,

时间:2010-01-09 11:57:34

标签: python python-3.x concatenation

var1 = 'abc'
var2 = 'xyz'

print('literal' + var1 + var2) # literalabcxyz
print('literal', var1, var2) # literal abc xyz

...除了自动空格','两者之间有什么区别?哪个正常使用,哪个也是最快?

由于

3 个答案:

答案 0 :(得分:25)

(你使用的是Python 3.x,其中print是一个函数 - 2.x,print是一个声明。提到主要的Python版本2.x或3.x是个好主意 - 特别是当寻求帮助,因为目前大多数人合理地假设2.x,除非它已经说明了。)

第一个print('literal' + var1 + var2)计算表达式并传递单个参数进行打印。第二个,print('literal', var1, var2),只传递三个参数进行打印。这几乎是偶然的输出:这就是打印的工作原理。第二个没有进行任何连接,只是输出由空格分隔的每个值(这是打印的默认行为)。

要明确:表达式中的加号进行连接,但逗号不是进行连接。


时间安排:我得到了以下结果;但是,我认为这是有偏见的,因为字符串太短(例如,较长的字符串可能会扭转结果),并且在任何情况下,在问题中出现的打印都不会花费很长时间(您将获得更好的性能担心很多其他事情。)

注意:使用python -m timeit --help获取有关如何使用timeit的说明。

$ python -m timeit -s 'from cStringIO import StringIO; out = StringIO(); a = "abc"; b = "def"' 'print >>out, a, b'
100000 loops, best of 3: 7.68 usec per loop
$ python -m timeit -s 'from cStringIO import StringIO; out = StringIO(); a = "abc"; b = "def"' 'print >>out, a + " " + b'
100000 loops, best of 3: 4.67 usec per loop
$ python -m timeit -s 'from cStringIO import StringIO; out = StringIO(); a = "abc"; b = "def"' 'print >>out, " ".join([a, b])'
100000 loops, best of 3: 5.37 usec per loop

特别注意,每个代码都会给出完全相同的输出(如果一个方法给出错误的结果,那么比较是没有意义的)。 StringIO是在这些测试中打印到屏幕的简单方法,但它也可能影响结果。

答案 1 :(得分:6)

将字符串作为参数传递给print,使用'sep'关键字将它们连接起来。默认为''(空格)。

Separator关键字仅限Python 3.x.在此之前,分隔符始终是一个空格,除了2.5(?)和更高的位置,你可以from __future__ import print_function或类似的东西。

>>> print('one', 'two') # default ' '
one two
>>> print('one', 'two', sep=' and a ')
one and a two
>>> ' '.join(['one', 'two'])
one two
>>> print('one' + 'two')
onetwo

答案 2 :(得分:1)

使用逗号为print函数提供多个参数(在这种情况下,它们全部打印,由空格分隔。使用plus将创建一个打印参数,完整打印。 我认为在这种情况下使用+是最好的。