字符串
python3的内置字符串类型默认是支持utf-8的,并且python的字符串提供有一套强大的处理工具集,为程序设计带来了巨大的便利。 相较于C语言,python没有单个字符这种类型,单字符也是字符串。python的字符串是不可变类型,因此不能修改一个字符串对象。 在Python里单引号(’’),双引号(""),三引号(’’’’’'和"""""")都可以用来把字符串包括起来。它们都是字符串,没有本质上的区别。 注意 由于python3的str类型是Unicode的,因此我们应该摒弃C语言中一个ASCII字符对应于一个字节的想法。对于非ASCII字符而言,一个字符对应的字节数是不定的,因为这取决于Unicode码点序列。
禁止转义
python提供了进制转义的方式,这在书写正则表达式,Windows下文件路径等场景是非常有用的,在此介绍一下这种方式。只需要在字符串前面加上字母r(或R)即可。
代码语言:javascript复制>>> r"c:windowsuserdesktop"
'c:\windows\user\desktop'
>>> R"c:windowsuserdesktop"
'c:\windows\user\desktop'
效果十分的nice.
唯一需要注意的一点:r'......'
,即使是原始字符串也不能以结尾,这样结尾的话,‘会被认为是转义’,而不是字符串结束。所以如果想要一个以结尾的字符串,可以这么做
>>> r'......' '\'
'......\'
三引号
下面这个例子清晰的展示了三引号的强大之处。
代码语言:javascript复制str1 = """
... 1
... 2
... 3
... """
>>> print(str1)
1
2
3
>>>
三引号中可以包含多行字符串,并且打印输出之后也是原模原样的。这非常有利于我们在python代码中嵌入XML,HTML. 在python中三引号还经常用于文档字符串,用来注释。
和*运算符
代码语言:javascript复制>>> str1 = "123"
>>> str2 = "abc"
>>> str1 str2 # 连接两个字符串
'123abc'
>>> str1 * 3 # 产生n倍的原来的字符串
'123123123'
字符串和Unicode编码转换
python中提供了ord()函数来实现单个字符转换为其Unicode编码。例如:
代码语言:javascript复制>>> c = "去"
>>> ord(c)
21435
另外一个函数chr()可以实现将Unicode编码转换为相应的单个字符。例如:
代码语言:javascript复制>>> chr(21435)
'去'
对于ASCII而言,码点(Unicode编码)是我们熟悉的7位数字。例如:
代码语言:javascript复制>>> ord('A')
65
字符串格式化
目前的python中存在两种字符串格式化方式。 C语言风格的字符串格式化方式
代码语言:javascript复制>>> "%s" % str1
'123'
C#/.NET风格的字符串格式化方式
代码语言:javascript复制>>> "{}".format(str1)
'123'
虽然python官方曾经表示要移除C语言风格的字符串格式化方式,但是直到我所使用的的python3.8.2版本,仍未被移除。 这一点和python之禅里的设计哲学有所冲突。
代码语言:javascript复制There should be one-- and preferably only one --obvious way to do it.
格式化的高级方式不在此介绍,这些东西应当是用到的时候再去查找,而不是记住它们。因为大多数时候,我们并不会纠结于此。
字符串索引
看下面的例子,你的第一感觉肯定是非常神奇。
代码语言:javascript复制>>> S = "123"
>>> S[0]
'1'
>>> S[0][0]
'1'
>>> S[0][0][0]
'1'
>>> S[0][0][0][0]
'1'
>>> S[0][0][0][0][0]
'1'
>>> S[0][0][0][0][0][0]
'1'
这是因为python中没有单个字符这个概念,单个字符也是字符串,所以就造成了上面这种结果。