连接运算符+或,

3zz*_*zzy 11 python concatenation python-3.x

var1 = 'abc'
var2 = 'xyz'

print('literal' + var1 + var2) # literalabcxyz
print('literal', var1, var2) # literal abc xyz
Run Code Online (Sandbox Code Playgroud)

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

谢谢

小智 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
Run Code Online (Sandbox Code Playgroud)

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


Tor*_*amo 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
Run Code Online (Sandbox Code Playgroud)