翻译自Do Not Use “+” to Join Strings in Python
java
当我开始使用python时,因为很是直观所以经常使用+
来链接字符串——正如许多其余程序设计语言如java的链接方式。
可是,很快我发现许多开发者彷佛更喜欢使用.join()
而非+
.本文将介绍二者之间的区别以及为何你须要避免使用+
.python
做为初学者,或者从其余语言转向python的开发者,很容易将代码写为下面的形式:web
str1 = "I love " str2 = "python." print(str1 + str2) # I love python
当你使用python愈来愈多时,你可能意识到有些人更喜欢使用join()
方法:编程
str1 = "I love " str2 = "python." print(''.join([str1, str2]) # I love python
老实说,当我第一次看见上面这种写法是,我想的是为何须要这种不直观且看上去很抽象的方式。编程语言
然而,有一次我须要将一个列表中的多个字符串链接起来。svg
strs = ['Life', 'is', 'short,', 'I', 'use', 'Python']
一开始,我写下了以下代码:oop
strs = ['Life', 'is', 'short,', 'I', 'use', 'Python'] def join_strs(strs): result = '' for s in strs: result +=' ' + s return result[1:] join_strs(strs) # 'Life is short, I use Python'
在这个例子中,我必须使用一个for循环来一个接一个地链接字符串。同时,循环中的字符串必须前面统一加上一个空格以保证最终结果的每一个字符串前面都有一个空格——固然第一个字符串是例外。固然你能够经过断定索引来保证index=0时空格不会被加到字符串前。但不管如何你都须要一个for循环来作这些事。
在写下这段代码后,我会想起我曾经看到过.join()
方法,也许是时候使用它了:性能
strs = ['Life', 'is', 'short,', 'I', 'use', 'Python'] def join_strs_better(strs): return ' '.join(strs) join_strs_better(strs) # 'Life is short, I use Python'
这是多么容易!只须要一行代码全部问题都被解决了。因为.join()
方法被一个字符串对象调用——这个字符串对象使用列表中的全部字符串来生成一个新的字符串——所以你无需担忧开头会被添加一个多余的空格。
你不会真的觉得这是咱们避免使用+
的惟一理由吧?下一节将介绍更多二者的区别!学习
join()
方法背后的逻辑 咱们相对两种方法的性能作出对比,经过在Jupyter Notebook中使用%timeit
来评估:
ui
基于100k次实验的结果是值得相信的。很明显,join()
方法比使用+
快了4倍有余。
为何会这样?
下面是使用+
时的概念图
这展现了for循环和+
操做符的步骤:
result += ' ' + s
,分配表示' '
的内存那join()
方法被调用时会发生什么?
很显然两种方法的主要区别就在于内存调用次数致使的性能提高。
想象一下对六个字符串的链接,join()
方法已经比+
快四倍还多。那若是咱们须要链接很大数量的字符串呢?显然二者会有更大的差别。
在这篇短文中,我将python中+
和join()
两种链接字符串的方法进行了对比。显而后者的表现优于前者许多。
学习一种编程语言一般是是一个很长的曲线,可是Python使得初学者更加容易接受——这无疑是很棒的。可是当咱们入门并开始使用Python后,咱们不该该停留在以前所使用Python的方式。实际上,大师和普通开发者的区别每每来自于对细节的了解。
让咱们继续发现更多Python编程的细节来使本身更加精通Python!