为什么Python 可以使用 + 把两个字符串连接成一个字符串

来源:互联网  时间:2016/6/2 6:10:42

关于网友提出的“为什么Python 可以使用 + 把两个字符串连接成一个字符串”问题疑问,本网通过在网上对“为什么Python 可以使用 + 把两个字符串连接成一个字符串”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:为什么Python 可以使用 + 把两个字符串连接成一个字符串
描述:

今天学习Python,看到这样一个例子,想问一下原因:

w = "This is the left side of..."
e = "a string with a right side."

print w + e

结果是:

This is the left side of...a string with a right side.

我想问一下为什么通过使用 + 可以把两个字符串连成一个长字符串,用的是什么方法?


解决方案1:

+这个操作符提供了一个参数为两个字符串的重载

解决方案2:

实际上调用的是所谓的特殊方法, 此例中是__add__
dir(str)就可以看到那些「特殊方法」

另,+连接字符串时,时间复杂度太高, 不如join方法, 比如"".join(iterable)

解决方案3:

运算符重载。具体说来,每个变量在Python中都是以对象形式存在的,即都是继承于Object。而Object则具有 object.__add__(self, other)这样一个方法。每当处理x+y这一个表达式的时候,将会调用x.__add__(y)。另外为了交换律,还有__radd__方法,也就是用来处理y+x,这样会调用y.__radd__(x)

所以我们也可以自己重载+,比如:

class Free:
    def __init__(self, info):
        self.info = info   
    def __add__(self, moreinfo):
        return str(self) + moreinfo
    def __radd__(self, moreinfo):
        return moreinfo + str(self)
    def __str__(self):
        return self.info

Free这个Class,便得以直接成为+操作符的左/右参数。

正如richardzhiming所说,a+b是低效的,这是基于大量的+操作所讨论的。这是因为String是一个不可变的对象,你并不是真的把字符串b加到字符串a这个对象后面,而是需要创建一个新的对象,然后把a和b copy进去。因此当你大量进行+之时,你会创建许许多多临时的String对象。''.join(str_list)更好,则是因为,字符串的创建和拷贝是一次完成,而不需要创建很多String对象。

关于字符串连接具体的实验和更深入的探讨,可以参考:
Efficient String Concatenation in Python
The Python String Concatenation Shootout

另外,程序的优化的关键并不在于每个细节都优化到,而是优化整体的瓶颈,所以题主也不是一定要记住每一个细微的优化技巧。但是了解具体的实现细节,对于掌握语言,是很有意义的。

上一篇Python 的所谓「面向对象编程」对于一个业余编程者来说有什么用?
下一篇python:前提是用list ,有两个list,比如一个是ll=[1,2,3],另一个是ii=["1","2","3"]
明星图片
相关文章
《为什么Python 可以使用 + 把两个字符串连接成一个字符串》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)