代码之家  ›  专栏  ›  技术社区  ›  eozzy

串联运算符+或,

  •  11
  • eozzy  · 技术社区  · 15 年前
    var1 = 'abc'
    var2 = 'xyz'
    
    print('literal' + var1 + var2) # literalabcxyz
    print('literal', var1, var2) # literal abc xyz
    

    …除了带“,”的自动空格,这两者有什么区别?哪一个正常使用,哪一个最快?

    谢谢

    3 回复  |  直到 9 年前
        1
  •  25
  •   Roger Pate    15 年前

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

    第一, print('literal' + var1 + var2) ,计算表达式并传递 一个论点 打印。第二, print('literal', var1, var2) 只是通行证 三论证 打印。这几乎是完全偶然的相同输出:打印就是这样工作的。第二种方法不进行任何连接,只输出由空格分隔的每个值(这是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
    

    特别要注意,每个代码将给出完全相同的输出(如果一个方法 给出错误的结果 )斯特林吉奥是一个简单的方法 在这些测试中打印到屏幕上,但也可能影响结果。

        2
  •  6
  •   Tor Valamo    15 年前

    将字符串作为参数传递到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
  •  1
  •   user254875486 TM Creative    15 年前

    使用逗号可以为打印函数提供多个参数(在本例中,这些参数全部打印,由一个空格分隔)。使用加号将为打印创建一个参数,该参数全部打印。 我认为在这种情况下使用+是最好的。