基础内容:
为什么‘+’可以连接两个字符串?
运算符重载。具体说来,每个变量在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.infoFree这个Class,便得以直接成为+操作符的左/右参数。
正如richardzhiming所说,a+b是低效的,这是基于大量的+操作所讨论的。这是因为String是一个不可变的对象,你并不是真的把字符串b加到字符串a这个对象后面,而是需要创建一个新的对象,然后把a和b
copy进去。因此当你大量进行+之时,你会创建许许多多临时的String对象。”.join(str_list)更好,则是因为,字符串的创建和拷贝是一次完成,而不需要创建很多String对象。
python中的转义序列:
Escape | What it does | 含义 |
---|---|---|
\ | Backslash () | 反斜杠 |
\’ | Single-quote (‘) | 单引号 |
\” | Double-quote (“) | 双引号 |
\a | ASCII bell (BEL) | 响铃符 |
\b | ASCII backspace (BS) | 退格符 |
\f | ASCII formfeed (FF) | 进纸符 |
\n | ASCII linefeed (LF) | 换行符 |
\N | {name} Character named name in the Unicode database (Unicode only) Unicode | 数据库中的字符名;name就是它的名字 |
\r | ASCII Carriage Return (CR) | 回车符 |
\t | ASCII Horizontal Tab (TAB) | 水平制表符 |
\u | xxxx Character with 16-bit hex value xxxx (Unicode only) | 值为16位十六进制xxxx的字符 |
\U | xxxxxxxx Character with 32-bit hex value xxxxxxxx (Unicode only) | 值为32位十六进制xxxx的字符 |
\v | ASCII vertical tab (VT) | 垂直制表符 |
\ooo | Character with octal value ooo | 值为八进制ooo的字符 |
\xhh | Character with hex value hh | 值为十六进制数hh的字符 |
Tips:
%r 可以显示变量的原始数据(raw data)。