2.2节讲过,Python中有字符串类型。在Python中,字符串用'或"括起,例如'abc'、"qwerty"等都是字符串。注意'和"并非字符串的内容。python
电脑能够存储数字,那字符怎么办?答案是能够给字符编码,这样只要存储数字,显示时转成字符就能够了。因为电脑是美国人发明的,所以电脑最初只有128个(不是很肯定)字符被编码,叫作ASCII码,范围为0~127。例如字母A的ASCII码为65,字母d的ASCII码为100。函数
一个8位无符号整数的存储范围是0~255,所以存储ASCII字符只须要一个字节。this
此外,还有扩展的ASCII编码,范围为0~255。前128个字符是同样的,后128个则是例如â、é这样的带有注音符号的字符。这里不详细介绍。编码
由于世界上不只有英语,还有其它语言,其它语言中又有更多的字符。所以ASCII码不能知足要求,须要一个新的字符集——Unicode。Unicode包含了世界上大多数语言的字符。例如中文的“我”字,Unicode码为25105,“文”字是25991。对于一个ASCII字符,其Unicode编码与ASCII编码是同样的。Unicode的0~128范围就是ASCII字符。spa
通常字符须要2个字节进行存储,很偏僻的就须要4个字节。code
根据字符的概念,字符串能够被从新定义成若干字符的组合。Python中的字符串类型为str,采用Unicode编码。所以里面可使用Unicode字符(例如中文)。Python中没有单独的字符类型。orm
字符串常量就是指像"python"、'globe'这些不变的字符串,与变量相对。blog
字符串里不只能包含普通字符,还能够包含特殊字符。这些特殊字符就须要经过特殊方法表示出来,这种字符叫作转义字符。在Python中,转义字符以\开头。由于转义字符在代码中须要用两个字符表示,也叫作转义序列。索引
在字符串中,你可能想换行,这时就可使用\n转义字符;你可能想要tab,这时你能够直接打tab或使用\t转义字符(推荐后者)。字符串
例如:
>>> print('first line\nsecond line\nthird line') first line second line third line
与下面:
print('first line') print('second line') print('third line')
或下面:
>>> print('first line') first line >>> print('second line') second line >>> print('third line') third line
是相同的。
对于\t也是同样的:
>>> print('1\t2\t3\t4\tend') 1 2 3 4 end
还有一些容易形成歧义的字符,例如'、"和\('和"会被觉得成字符串的开始或结束,\会认为是转义符号),也须要使用转义序列\'、\"和\\才能输出:
>>> print('You must use \\\', \\\" and \\\\ to display \', \" and \\.') You must use \', \" and \\ to display ', " and \.
固然,对于只含有'的字符串,能够用"括起;对于只含有"的字符串,能够用'括起。例如:
>>> print('"All right", he says.') "All right", he says. >>> print("I'm OK.") I'm OK.
至于既有'又有"的字符串就只能用转义序列或者(下文即将讲到的)原始字符串了。
Python支持原始字符串。这种字符串内的字符都是原始的,没有转义。转义字符串用r' '括起,例如:
>>> r'this \n does not mean newline' 'this \\n does not mean newline'
不过注意,Python在不用print()显示字符串时,是会加上转义符号\的。
有时候,字符串里有不少换行符不够方便,这时可使用多行字符串。多行字符串用''' '''或""" """(每边3个'或3个")括起,里面的enter被看做换行符。例如:
>>> print('''first line ... second line ... third line''') first line second line third line
注意输入多行字符串时,在字符串结束以前,命令提示符也会变成...。
在多行字符串一行结尾加\能够防止换行:
>>> print('''\ ... first line ... second line ... third line\ ... ''')
first line
second line
third line
还能够用r'''...'''和r"""..."""表示原始多行字符串,请本身尝试。
使用len()函数计算字符串长度。例如:
>>> len('GoldenGlobalView') 16 >>> s = 'internationalization' >>> len(s) 20 >>> len('Unicode字符串') 10
使用string[index]能够获取字符串string索引(index,也叫下标、位置)为index的字符:
>>> s = 'Python Tutorial' >>> s[0] 'P' >>> s[5] 'n' >>> s[12] 'i'
注意索引从0开始,0索引对应第一个字符,1对应第二个,2对应第三个,等等。
若是索引太大,就会出现错误:
>>> s[100] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range
与C/C++不一样,索引也能够是负数:
>>> s[-1] 'l' >>> s[-4] 'r' >>> s[-10] 'n'
-1的索引表示最后一个字符,-2表示倒数第二个,-3表示倒数第三个,以此类推。
索引过小也不行:
>>> s[-100] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range
注意虽然这样能够获取字符串中的某个字符,可是获取的仍然是字符串类型,只是长度为1。Python没有单独的字符类型。
两个或多个字符串常量能够直接写在一块儿,进行拼接(concatenation):
>>> 'class''mate' 'classmate' >>> "pyt""hon" 'python' >>> 'note'"book" 'notebook' >>> 'un''believ''able' 'unbelievable'
注意两个字符串能够一个用'括起,一个用"括起。通常将这种技巧用于长字符串:
>>> print('We often cut a long string ' ... 'into several lines.') We often cut a long string into several lines.
若是是一个类型为str的变量和一个字符串常量,就不能直接写在一块儿进行拼接了:
>>> s = 'class' >>> s 'mate' File "<stdin>", line 1 s 'mate' ^ SyntaxError: invalid syntax
这时须要用+运算符:
>>> s = 'class' >>> s + 'mate' 'classmate'
+运算符也能够用于两个str变量之间:
>>> s1 = 'class' >>> s2 = 'mate' >>> s1 + s2 'classmate'
在Python中,假设s是一个字符串,n是个整数,则s*n和n*s表示将s重复n次。
例如:
>>> 'py' * 2 'pypy' >>> 3 * 'un' + 'known' 'unununknown'
n小于等于0时,字符串为空:
>>> 'str' * 0 '' >>> 'egg' * -2 ''
最后来看一看字符串的格式化。
有时候咱们须要输出一个含有不少变量的句子,例如“xx,性别xx,xx岁,职业xx”。对于比较简单的,能够直接用print()输出:
>>> print('He is', age, 'years old.')
复杂一些的呢?
>>> name = 'Mike' >>> gender = 'male' >>> age = 25 >>> job = 'programmer' >>> print(name, ',', gender, ',', age, ', is a(n)', job) Mike , male , 25 , is a(n) programmer
能够看到,这里使用print()显得十分繁琐,并且由于print()的工做原理,输出含有多余的空格。
前面说过,能够经过指定print()的sep参数改变分隔符:
>>> print(name, ', ', gender, ', ', age, ', is a(n) ', job, sep='') # indicate an empty string as separator Mike, male, 25, is a(n) programmer
但这仍是很繁琐。
这时就能够用格式化字符串使代码更美观了。一个简单的例子以下:
>>> print('Hello, %s' % 'world') Hello, world
注意中间部分:
'Hello, %s' % 'world'
前面是一个字符串,'Hello, %s'。中间的%s是一个占位符,表示这里应该有一个字符串(str)。接下来是一个%,表示格式化字符串。后面是一个字符串'world',对应于前面的%s。Python将会分析上面代码,而后把'world'替换%s,获得'Hello, world!',传给print(),最后输出。
更难一点的例子:
>>> print('%d - %d = %d' % (10, 6, 10 - 6)) 10 - 6 = 4
'%d - %d = %d'中有3个占位符%d,表示整数(int)。%后面的十、六、10-6分别对应于第一个、第二个和第三个%d,Python会将3个%d,按照位置顺序,分别替换成十、六、10-6的结果4,因而整个字符串变成'10 - 6 = 4',而后输出。
那么前面的例子就解决了:
>>> print('%s, %s, %d, is a(n) %s' % (name, gender, age, job)) Mike, male, 25, is a(n) programmer.
1. 字符串编码问题
2. 第二提示符
3. 格式化占位符
1. 字符集有ASCII字符集和Unicode字符集。
2. Python中的字符串类型为str。
3. Python没有单独的字符类型,一个字符就是一个长度为1的str。
4. 转义字符以\开头,常见的有\n、\t、\'、\"、\\。
5. 原始字符串用r'...'或r"..."表示。
6. 多行字符串用'''...'''或"""..."""表示。
7. 原始多行字符串用r'''...'''或r"""..."""表示。
8. 使用len()函数计算字符串长度。
9. 使用string[index]获取字符串string的index位置上的字符(注意返回的是一个长度为1的str)。
10. 将两个字符串常量写在一块儿能够拼接。
11. 字符串能够用+运算符进行拼接。
12. string*num表示将string字符串重复num次。