Python——字符串

2021-06-09 14:11:29 浏览数 (1)

字符串

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'......',即使是原始字符串也不能以结尾,这样结尾的话,‘会被认为是转义’,而不是字符串结束。所以如果想要一个以结尾的字符串,可以这么做

代码语言:javascript复制
>>> 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中没有单个字符这个概念,单个字符也是字符串,所以就造成了上面这种结果。

0 人点赞