![cde413a388d2e6f4be43228ba1d23010.png](https://i-blog.csdnimg.cn/blog_migrate/b133ec4a8714115eb23a81585b08b5f3.jpeg)
python 基础知识 string
认识一下python中的string
在python语言中,字符串是一种内建数据类型,是通过类str来表示和处理的。
string的创建
python中字符串的创建可以通过单引号,双引号或三个连续的引号表示,只不过三个连续的引号创建的字符串可以包括空白字符(比如换行符),不同的创建方式下,同样的字面值的内存地址是一样的
>>> str1 = 'hello' >>> str2 = "hello">>> str3 = '''hello'''>>> str4 = """hello""">>> id(str1)3072807392>>> id(str2)3072807392>>> id(str3)3072807392>>> id(str4)3072807392
如果字符串是重复字符,也可以通过下面的方式创建
>>> str = 'a' * 3>>> str'aaa'
string的长度
在python3下,字符串是不可变的unicode码点序列,所以通过len函数获取string的长度,其实是获取string中unicode码点数。要想获取string的字节长度,可以通过str的encode()方法可以获取字节对象,进而获取字节长度
>>> len('hello')5>>> len('中国')2>>> '中国'.encode() b'xe4xb8xadxe5x9bxbd'>>> len('中国'.encode())6
string前缀
在python中可以通过给string加前缀的方式,使string字面值有特殊的含义,目前有3种string前缀,且string前缀可以两两组合使用
- r 表示后续字符串中反斜杠不进行转义, 取字面值
- u 表示后续字符串为unicode码点
- f 表示后续字符串为format字符串,python3.6引入
>>> str1 = r'hello world'>>> str1'hello world'>>> str2 = u'中国'>>> str2'中国'>>> width = 1>>> print(f'width: {width}')width: 1
这里稍微多说一点,在上面可以看到,b'xe4xb8xadxe5x9bxbd'和u'中国'都是表示的汉字“中国”,这是怎么情况呢?这里涉及到Unicode字符集和UTF-8编码的一点小知识。
在Unicode字符集中,通过2个字符中和国分别表示汉字“中”和“国”,而UTF-8编码通过如下方式对Unicode字符集进行编码
![61a2bff4f5d33d0ac488591715c8456a.png](https://i-blog.csdnimg.cn/blog_migrate/6d5210f667d97ee0d4106329d76fa986.jpeg)
前面是对应的Unicode字符区间,后面是该区间内字符的UTF-8编码方式
以“中”字为例,Unicode码点为U-00004e2d,对应在图表中的第三行U-00000800 ~ U-0000FFFF区间,对应的UTF-8编码方式为1110 xxxx 10xx xxxx 10xx xxxx,其中x为Unicode码点U-00004e2d的二进制,从右到左排列。
![45cbbafc3eed164d800421f23b27d361.png](https://i-blog.csdnimg.cn/blog_migrate/adaf1ca9f0230461781326c738aa3d6c.jpeg)
由此可见b'xe4xb8xad'和中都是“中”字的表示方式