当前位置 博文首页 > zy010101博客:Python——字符串

    zy010101博客:Python——字符串

    作者:[db:作者] 时间:2021-06-11 15:34

    字符串

    python3的内置字符串类型默认是支持utf-8的,并且python的字符串提供有一套强大的处理工具集,为程序设计带来了巨大的便利。
    相较于C语言,python没有单个字符这种类型,单字符也是字符串。python的字符串是不可变类型,因此不能修改一个字符串对象。
    在Python里单引号(’’),双引号(""),三引号(’’’’’'和"""""")都可以用来把字符串包括起来。它们都是字符串,没有本质上的区别。
    注意
    由于python3的str类型是Unicode的,因此我们应该摒弃C语言中一个ASCII字符对应于一个字节的想法。对于非ASCII字符而言,一个字符对应的字节数是不定的,因为这取决于Unicode码点序列。

    禁止转义

    python提供了进制转义的方式,这在书写正则表达式,Windows下文件路径等场景是非常有用的,在此介绍一下这种方式。只需要在字符串前面加上字母r(或R)即可。

    >>> r"c:\windows\user\desktop"
    'c:\\windows\\user\\desktop'
    >>> R"c:\windows\user\desktop"
    'c:\\windows\\user\\desktop'
    

    效果十分的nice.
    唯一需要注意的一点:r'......\',即使是原始字符串也不能以\结尾,这样结尾的话,‘会被认为是转义’,而不是字符串结束。所以如果想要一个以\结尾的字符串,可以这么做

    >>> r'......' + '\\'
    '......\\'
    

    三引号

    下面这个例子清晰的展示了三引号的强大之处。

    str1 = """
    ... 1
    ... 2
    ... 3
    ... """
    >>> print(str1)
    
    1
    2
    3
    
    >>>
    

    三引号中可以包含多行字符串,并且打印输出之后也是原模原样的。这非常有利于我们在python代码中嵌入XML,HTML.
    在python中三引号还经常用于文档字符串,用来注释。

    +和*运算符

    >>> str1 = "123"
    >>> str2 = "abc"
    >>> str1 + str2     # 连接两个字符串
    '123abc'
    >>> str1 * 3        # 产生n倍的原来的字符串
    '123123123'
    

    字符串和Unicode编码转换

    python中提供了ord()函数来实现单个字符转换为其Unicode编码。例如:

    >>> c = "去"
    >>> ord(c)
    21435
    

    另外一个函数chr()可以实现将Unicode编码转换为相应的单个字符。例如:

    >>> chr(21435)
    '去'
    

    对于ASCII而言,码点(Unicode编码)是我们熟悉的7位数字。例如:

    >>> ord('A')
    65
    

    字符串格式化

    目前的python中存在两种字符串格式化方式。
    C语言风格的字符串格式化方式

    >>> "%s" % str1
    '123'
    

    C#/.NET风格的字符串格式化方式

    >>> "{}".format(str1)
    '123'
    

    虽然python官方曾经表示要移除C语言风格的字符串格式化方式,但是直到我所使用的的python3.8.2版本,仍未被移除。
    这一点和python之禅里的设计哲学有所冲突。

    There should be one-- and preferably only one --obvious way to do it.
    

    格式化的高级方式不在此介绍,这些东西应当是用到的时候再去查找,而不是记住它们。因为大多数时候,我们并不会纠结于此。

    字符串索引

    看下面的例子,你的第一感觉肯定是非常神奇。

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

    下一篇:没有了