资讯专栏INFORMATION COLUMN

你所不知道的Python | 字符串连接的秘密

alin / 1357人阅读

摘要:私房菜输出私房菜方法使用方法方法是中出现的一种代替操作符的字符串格式化方法,同样可以用来连接字符串。私房菜方法使用方法字符串有一个内置方法,其参数是一个序列类型,例如数组或者元组等。

字符串连接,就是将2个或以上的字符串合并成一个,看上去连接字符串是一个非常基础的小问题,但是在Python中,我们可以用多种方式实现字符串的连接,稍有不慎就有可能因为选择不当而给程序带来性能损失。

方法1:加号连接

很多语言都支持使用加号连接字符串,Python也不例外,只需要简单的将2个或多个字符串相加就可以完成拼接。

a = "Python"
b = "私房菜"
r = a + b  # 输出"Python私房菜"
方法2:使用%操作符

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

a = "Python"
b = "私房菜"
r = "%s%s" % (a, b)  # 输出"Python私房菜"
方法3:使用format方法

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

a = "Python"
b = "私房菜"
r = "{}{}".format(a, b)
方法4:使用f-string

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

a = "Python"
b = "私房菜"
r = f"{a}{b}"
方法5:使用str.join()方法

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

a = "Python" 
b = "私房菜"
r = "".join([a, b])
对比测试

既然连接字符串有这么多方法,那么使用时到底选择哪种呢?我们从代码可读性和性能两个层面来评估一下上面5种方法。

使用timeit模块,分别执行上述5种方法的示例代码100000次,执行时间如图。

可以看到,%操作符、format和f-string都是字符串格式化方法,性能依次递增,加号连接的性能和f-string不相上下。

有一点需要注意的是,字符串类型是不可变的,所以每一次应用加号连接字符串都会生成一个新的字符串,连接多个字符串时,效率低下就是必然的了,我们将一次连接的字符串提升到10个和20个,再来进行2轮测试,下面是连接20个字符串时的耗时情况。

和连接两个字符串时的结果出现了一些不同,首先使用加号连接的方式在字符串数量较多时(大于10个),性能会急剧下降,str.join()方法在连接大量字符串时性能最好。

总结

连接少量字符串时
使用加号连接符在性能和可读性上都是明智的,如果对可读性有更高的要求,并且使用的Python 3.6以上版本,f-string也是一个非常好的选择,例如下面这种情况,f-string的可读性显然比加号连接好得多。

a = f"姓名:{name} 年龄:{age} 性别:{gender}"
b = "姓名:" + name + "年龄:" + age + "性别:" + gender

连接大量字符串时
joinf-string都是性能最好的选择,选择时依然取决于你使用的Python版本以及对可读性的要求,f-string在连接大量字符串时可读性并不一定好。切记不要使用加号连接,尤其是在for循环中。

欢迎关注我的公众号【Python私房菜】

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41924.html

相关文章

  • 可能是最全面 python 符串拼接总结

    摘要:在中字符串连接有多种方式,这里简单做个总结,应该是比较全面的了,方便以后查阅。方法是中出现的一种代替操作符的字符串格式化方法,同样可以用来连接字符串。小结连接少量字符串时推荐使用号操作符。参考链接你所不知道的字符串连接的秘密 在 Python 中字符串连接有多种方式,这里简单做个总结,应该是比较全面的了,方便以后查阅。 加号连接 第一种,通过+号的形式: >>> a, b = hell...

    Edison 评论0 收藏0
  • 关于JavaScript对象,所不知道事(一)- 先谈对象

    摘要:对象与属性让我们保持耐心,再梳理一下对象与属性的关系对象是属性的集合,当对象的属性是函数时,我们将其称之为方法。 这篇博文的主要目的是为了填坑,很久之前我发表了一篇名为关于JavaScript对象中的一切(一) — 对象属性的文章,想要谈一谈JavaScript对象,可那时只是贴了一张关于这个主题的思维导图,今天我会针对这一主题进行展开,将JavaScript对象一些平常不太常用的知识...

    mykurisu 评论0 收藏0
  • 所不知道Python | 符串格式化演进之路

    摘要:然而为了让我们更方便的使用这个常用功能,语言本身也在对字符串格式化方法进行迭代。不少使用过的小伙伴会知道其中的模板字符串,采用直接在字符串中内嵌变量的方式进行字符串格式化操作,在版本中也为我们带来了类似的功能字面量格式化字符串,简称。 字符串格式化对于每个语言来说都是一个非常基础和常用的功能,学习Python的同学大概都知道可以用%语法来格式化字符串。然而为了让我们更方便的使用这个常用...

    Blackjun 评论0 收藏0
  • 所不知道Python | 函数参数演进之路

    摘要:有一点需要注意的是,默认参数需要设置在必选参数后面,并且默认参数既可以通过位置调用,也可以通过关键字调用。通过位置指定参数通过位置指定参数报错,默认参数必须在必选参数后面参数默认值既支持关键字参数,也支持仅限关键字参数。 showImg(https://segmentfault.com/img/bVbdxcE?w=1224&h=618); 函数参数处理机制是Python中一个非常重要的...

    FingerLiu 评论0 收藏0

发表评论

0条评论

alin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<