Python序列类型之字符串详解

Posted nonstopcoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python序列类型之字符串详解相关的知识,希望对你有一定的参考价值。

字符串(str)
关于引号:Python中有3种引号。分为单引号、双引号、三引号。python中单引号’‘和双引号""没有区别,如a=’abc’,a=’’abc’’。三引号就是连敲三次单引号,不表示字符串,它用来多行注释,并且多行注释没结束(没出现第二个三引号)可以随便换行。若引号中还要加引号需要交叉使用,即外面单引号里面双引号,外面双引号里面单引号。
一对单引号或双引号加上引号内的字符就是字符串,字符串中间不可以换行,想换行显示在换行处敲一个\n。

>>> a=‘abcd‘
>>> b="efgh"
>>> type(a)
<class ‘str‘>
>>> type(b)
<class ‘str‘>
>>> c=‘ab"c"de‘
>>> print(c)
ab"c"de
>>> d=‘abc\ndefgh\nijk‘
>>> print(d)
abc
defgh
ijk

字符串的显示:解释器显示字符串时保留字符串原来的样子,如果print字符串显示的是客户看得到的效果,两端没引号。

>>> a=‘Hello world!‘
>>> a
‘Hello world!‘
>>> print(a)
Hello world!

str字符串和repr字符串(原始字符串)
我们平时写代码和打印的都是str字符串。str字符串写的时候要加引号,print str字符串时结果都是两端无引号,转义后的字符串。若想原样打印字符串,使用repr函数将str转换成原始字符串。

>>> print(str(‘Hello \nworld !‘))
Hello
world !
>>> print(repr(‘Hello \nworld !‘))
‘Hello \nworld !‘

转义符:\符号就是转义符,其功能是将后面紧跟的一个字符由普通意思转成特殊意思。若\后是引号,则取消其表示字符串的功能。若\后是字母,有时表示特定含义,如\n表示换行符,\t表示制表符。若不想转义需要在字符串前加小写r(将str转换成repr原始字符串)或者在\后再加一个\变成\。当我们打印文件路径时,防转义就特别有用。
转义符同样适用于表达式和语句。

>>> a=r‘abc\ndef\ngh‘
>>> print(a)
abc\ndef\ngh
>>> a=‘abc\\ndef\\ngh‘
>>> print(a)
abc\ndef\ngh
>>> b=‘Let‘s go‘
File "<stdin>", line 1
b=‘Let‘s go‘
^
SyntaxError: invalid syntax
>>> b=‘Let\‘s go‘
>>> b
"Let‘s go"


我们看到’Let’s go’会报错,因为机器不知道从哪里结束字符串。如果加一个\,紧跟的单引号就不再表示字符串。
注意使用repr()时打印原始字符串两端有引号,使用前端加r, 原始字符串打印时只防转义,两端无引号。
str和repr字符串都不能以\结尾,否则报错。若想以\结尾可以将\拆出单作为一个字符串,\写成\,如下:

>>> print(r‘C:\Program files\foo\bar‘‘\\‘)
C:\Program files\foo\bar\

关于编码

  我们从头说说编码是怎么回事。
  最初的电脑是怎么显示字符的呢?
  在电脑诞生不久,美国人创造了ASCII字符集,字符集中包含128个字符,这些字符就是我们键盘上的所有字符。每一个字符有一个编号(字符码),这个编号是10进制的,从0-127。然后将字符码从10进制转换成2进制。我们知道127转换成2进制是1111111,所以最多只要7位就能将128个ASCII字符全部表示。
  怎么储存ASCII字符呢?
  我们知道电脑的最小储存单位是字节(byte),一个字节有8位(bit),一个位上只能写0或1,所以一个字节能显示28=256个信息。而ASCII字符只占7位,所以字节第一位表示是否启用ASCII字符集,后7位表示字符。这样,只用一个字节就能储存所有的ASCII字符。
  但是世界上有很多字符,比如光是中文就有六万多个字,怎么表示呢。
  最初中国创建了自己的字符集,叫国标字符集,简写是GB。GB的字符码采用16进制,一个汉字的储存空间是2 byte。
  再后来为了国际上的交流方便,世界上推出了Unicode字符集,该字符集中包含多国文字。Unicode有两个版本,分别是UCS-2(2 byte)和UCS-4(4 byte),每个字都是固定的储存空间。可是每个字都用4个byte储存不是太浪费了吗?像英文字母,完全可以一个byte就行了,所以为了节约空间,又在Unicode字符集的基础上发明了UTF编码储存方法,有UTF-8、UTF-16、UTF-32。UTF-8的储存机制是这样的:若某个Unicode字符码转成2进制后会占用n个byte,则将这串2进制数填入到一个格式中|n个1110……|10……|10……。把2进制按顺序填入到……中即可,| |表示一个byte,若n大于2,再加一个byte显示1110。这个编码机制可以节约常用字符的储存空间,一般只用3个字节而不是4个字节来储存字符。
  Python中的英文、中文、阿拉伯数字都是采用Unicode编码来表示文本,编码默认采用UTF-8。Unicode中每个字符都采用一个字符码(code point)表示,且全世界统一,这样在不同的软件上都能显示相同的字符。
  怎样调取其他Unicode字符呢,有一个通用机制:使用字符的字符码(16或32位)或Unicode名称。获取字符的字面量或名称请登录http://unicode-table.com。 下面分别举例16位字符码、32位字符码、名称。 (解释器可能显示不出笑脸和猫,将代码拷贝到博客或有道云笔记的代码块中就看见了)

>>> ‘\u00c6‘
‘Æ‘
>>> ‘\U0001F60A‘
‘??‘
>>> ‘\NCat‘
‘??‘

以上是关于Python序列类型之字符串详解的主要内容,如果未能解决你的问题,请参考以下文章

序列之列表详解

python 基础笔记 — 数据类型之序列

Python常见序列详解

6python基本数据类型之序列类型

Python序列化之Json基础

Python数据类型之“文本序列(Text Sequence)”