美文网首页
伪·从零开始学Python - 2.2.2 数据类型 - 字符串

伪·从零开始学Python - 2.2.2 数据类型 - 字符串

作者: 阿啊阿吖丁 | 来源:发表于2018-03-23 14:57 被阅读18次

    本小节起,我们约定:在展示代码时,以下格式表示在Python Shell中输入。

    >>> 输入代码
    ... 继续代码
    输出代码
    

    基本介绍

    字符串(str)是表示文本的数据类型,可以有一个或多个Unicode字符。

    字符串需要用单引号(')或双引号(")包住(注意是英文状态下的不分左右的引号)。至于具体的区别,如果字符串中包含单引号,最好使用双引号包住;如果字符串中包含双引号,最好使用单引号包住。

    "It's excited! "
    'He said: "Hello!" '
    

    转义

    如果一个字符串中两种引号都有,怎么办?这就要用到Python的转义字符了。在需要转义的符号前面加上反斜杠(\),就能解决问题。你甚至可以在字符串内所有的引号都使用转义,虽然这样做非常不专业。

    '"I\'m excited!" said him. '
    "\"I'm excited!\" said him. "
    '\"I\'m excited!\" said him. '
    

    但是,如果你直接在Python Shell中输入上面的字符串,按回车,它只会直接输出和输入相同的字符;但是,如果你使用print函数打印字符串,就能输出预想的字符了。

    字符串转义使用print函数,其中的“It's”改为“I'm”……

    转义可以用在很多方面,比如换行、制表符。

    转义字符 含义
    \\ 反斜杠(\)
    \' 单引号(')
    \" 双引号(")
    \a ASCII蜂鸣(BEL)
    \b ASCII退格(BS)
    \f ASCII走纸(FF)
    \n ASCII换行(LF)
    \N{name} 给定名称(name)的Unicode字符
    \ooo 给定八进制值(ooo)的字符
    \r ASCII回车符(CR)
    \t ASCII制表符(TAB)
    \uhhhh 给定16位十六进制值(hhhh)的Unicode字符
    \Uhhhhhhhh 给定32位十六进制值(hhhhhhhh)的Unicode字符
    \v ASCII垂直指标(VT)
    \xhh 给定8位十六进制值(hh)的Unicode字符

    我们可以看下面一个比较极端的例子:

    print('2018-01-01\tbiaos\bzhifu\53\n2018-01-02\t\N{CJK UNIFIED IDEOGRAPH-87D2}\u86c7\\\n2018-01-03\tPython\r2018-01-04\t\U0001F602')
    

    输出结果如下(由于各终端对字符的支持不一样,因此举几个例子):

    (Deepin Linux 深度终端,使用Noto Mono字体)
    2018-01-01  biaozhifu+
    2018-01-02  蟒蛇\
    2018-01-04  😂thon
    
    (通过Windows 10上的PuTTY连接的CentOS 7,使用Inziu IosevkaCC SC字体,其中的表情只显示了半个脸)
    2018-01-01      biaozhifu+
    2018-01-02      蟒蛇\
    2018-01-04      😂ython
    
    (Windows 10上的PowerShell,使用Inziu IosevkaCC SC字体,其中的表情显示为两个方框;在Atom中使用platformio-ide-terimal插件调用PowerShell时,可以正常显示)
    2018-01-01      biaozhifu+
    2018-01-02      蟒蛇\
    2018-01-04      😂on
    
    (Windows 10 上的PyCharm 2017.3.4,使用Inziu IosevkaCC SC字体)
    2018-01-01  biaozhifu+
    2018-01-02  蟒蛇\
    2018-01-04  😂
    
    两个表情的异常显示情况

    此外还有一种情况:如果字符串非常长的时候,可以使用\后面另起一行继续:

    print('Hello \
    World')
    

    输出结果为Hello World

    有时候一个字符串可能会用到大量的反斜杠,严重影响视觉。这时候我们可以在字符串的前面加上r或者是R,表示字符串内的文本不转义。

    >>> print('C:\name\bag\test.py')
    C:
    amag    est.py
    >>> print('C:\\name\\bag\\test.py')
    C:\name\bag\test.py
    >>> print(r'C:\name\bag\test.py')
    C:\name\bag\test.py
    

    但是,遇到字符串包含与包围字符串的引号相同的引号的时候,无解。有意思的是,如果这种情况下不加反斜杠,会报错;加了反斜杠,它会连同反斜杠也输出来。

    不转义的有趣情况

    多行文本

    此外,Python还可以使用前后三个单引号或双引号(两边的引号类型要一致)的形式直接显示多行字符串(单行也可以),不需要在换行处加\n。在其中仍然可以使用转义,但一个或两个出现的引号不用转义。

    print('''"I'm excited!\U0001F602" said him. ''')
    print("""春眠不觉晓
    处处闻啼鸟
    夜来风雨声
    花落知多少""")
    

    输出结果:

    "I'm excited!😂" said him. 
    春眠不觉晓
    处处闻啼鸟
    夜来风雨声
    花落知多少
    

    实际上,单独使用这样的多行文本可以当作Python里面的多行注释。在很多代码中都是这样(这时候就不需要考虑转义的问题了)。

    多行注释

    参考资料

    参​见0.1节。

    相关文章

      网友评论

          本文标题:伪·从零开始学Python - 2.2.2 数据类型 - 字符串

          本文链接:https://www.haomeiwen.com/subject/mwygqftx.html