【问题标题】:Concatenation Operator + or ,连接运算符 + 或 ,
【发布时间】:2011-01-03 05:52:22
【问题描述】:
var1 = 'abc'
var2 = 'xyz'

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

...除了带有','的自动空格外,两者有什么区别?哪个正常使用,哪个最快?

谢谢

【问题讨论】:

    标签: python python-3.x concatenation


    【解决方案1】:

    (您使用的是 Python 3.x,其中 print 是一个函数——在 2.x 中,print 是一个语句。提及主要的 Python 版本(2.x 或 3.x)是个好主意——尤其是在寻求帮助,因为目前大多数人都合理地假设 2.x,除非另有说明。)

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

    明确地说:表达式中的加号进行连接,而逗号不是进行连接。


    时机:我得到了以下结果;但是,我认为这是有偏见的,因为字符串太短(例如,更长的字符串可能会反转结果),并且无论如何,打印为问题中的内容不会花费很长时间(担心 许多其他东西)。

    注意:请使用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 是一种打印到屏幕的简单方法,但它也可能会影响结果。

    【讨论】:

    • 两者中哪个最快?
    • 它们做不同的事情,你无法合理地比较它们的速度。也就是说,您可以比较 打印 两种不同的方式,使用 timeit 模块。
    • 请注意,对于上述时间,cStringIO 几乎肯定会执行不同于写入控制台的操作,并且当写入控制台时,性能可能会根据您所在的平台和大小而有所不同你正在处理的字符串。
    【解决方案2】:

    将字符串作为参数传递给 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
    

    【讨论】:

    • 两者中哪个最快?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-29
      • 2013-11-12
      • 2012-01-20
      • 2013-03-15
      • 2010-09-24
      • 2014-10-12
      • 2014-02-27
      • 2011-06-20
      相关资源
      最近更新 更多