zoukankan      html  css  js  c++  java
  • Py 可能是最全面的 python 字符串拼接总结(带注释版)

    在 Python 中字符串连接有多种方式,这里简单做个总结,应该是比较全面的了,方便以后查阅。

    第一种,+号

    >>> a, b = 'hello', ' world'

    >>> a + b

    'hello world'

    第二种,逗号

    >>> a, b = 'hello', ' world'

    >>> print(a, b)

    hello  world

    但是,使用,逗号形式要注意一点,就是只能用于print打印,赋值操作会生成元组:

    >>> a, b

    ('hello', ' world')

    python之禅注:实际上,这不算是字符串连接的一种方式,因为'hello', ' world'会当作一个元组存在,通过解包(unpacking)的方式赋值给变量 a 和 b.

    第三种,直接连接

    print('hello'         ' world')

    print('hello''world')

    Python之禅注:这算是Python里面的一种语法糖,连续的字符串会自动拼接成一个字符串。在内存中不会存在两个字符串对象。(代码可左右滑动)

    >>> def x():

    ...     a = 'a''b'

    ...

    >>> dis.dis(x)

      2           0 LOAD_CONST               1 ('ab')

                  3 STORE_FAST               0 (a)

                  6 LOAD_CONST               0 (None)

                  9 RETURN_VALUE

    第四种,%操作符

    在 Python 2.6 以前,%操作符是唯一一种格式化字符串的方法,它也可以用于连接字符串。

    print('%s %s' % ('hello', 'world'))

    第五种,format方法

    format 方法是 Python 2.6 中出现的一种代替 % 操作符的字符串格式化方法,同样可以用来连接字符串。

    print('{}{}'.format('hello', ' world')

    第六种,join内置方法

    字符串有一个内置方法join,其参数是一个序列类型,例如数组或者元组等。

    print('-'.join(['aa', 'bb', 'cc']))

    第七种,使用f-string

    Python 3.6 中引入了 Formatted String Literals(字面量格式化字符串),简称 f-string,f-string 是 % 操作符和 format 方法的进化版,使用 f-string 连接字符串的方法和使用 %操作符、format 方法类似。

    >>> aa, bb = 'hello', 'world'

    >>> f'{aa} {bb}'

    'hello world'

    第八种,*操作符

    >>> aa = 'hello '

    >>> aa * 3

    'hello hello hello '

    Python之禅注:*操作符其实是一种操作符重载操作,对应的魔术方法是 __mul__

    >>> a = [1]

    >>> a*2

    [1, 1]

    >>> a.__mul__(3)

    [1, 1, 1]

    小结

    连接少量字符串时,推荐使用+号操作符。

    如果对性能有较高要求,并且python版本在3.6以上,推荐使用f-string。例如,如下情况f-string可读性比+号要好很多:

    a = f'姓名:{name} 年龄:{age} 性别:{gender}'

    b = '姓名:' + name + '年龄:' + age + '性别:' + gender

    连接大量字符串时,推荐使用 join 和 f-string 方式,选择时依然取决于你使用的 Python 版本以及对可读性的要求。

    Python之禅注:笔者曾经做过一个测试,python3.6中,数据量不大的情况下 +操作甚至比join操作还快。你还有遇到过哪些神操作,欢迎留言。

  • 相关阅读:
    flex+spring3.0+blazds 数据推送整理版
    深入理解java虚拟机学习笔记1.
    一个netty序列化引起的思考。
    万年历
    面试理论题
    EF之Database First
    20120902 09:29 SQL、LINQ、Lambda 三种用法
    内容漂浮在图片上(div漂浮)
    生成订单号
    时间对比
  • 原文地址:https://www.cnblogs.com/yinguo/p/10841157.html
Copyright © 2011-2022 走看看