python(3): strings的表示


               
               
               
                string在python中是一个专门的类型,而不像c中,只是一种char数组。因此有一大堆专门用于string操作的函数。string在python是属于“序列”这一大类,“序列”中还有list和tuple,它们都有类似的操作。string是不可变的,也就是你可以用:S[0]的形式把S中的第一个字符提取出来,但不能用S[0]="c"这种方式把S中的第一个字符改为"c"。而list就可以。c中的字符数组也可以。内置函数str(object)可以把任何类型的对象用字符串表示出来。当然表示成什么样子,需要对象内部自己定义。
介绍string也分为两个方面,一是string的表示,二是string的操作。string的表示方法是比较多,这好像不符合python设计的初衷────尽量消除确定性。
  • 单引号:‘aasd’
    • 双引号:”aadf“
    • 三引号:‘’‘kasdjfk''' """kajsdkf"""
    • 含转义字符:’study/thard'
    • raw字符串:r‘C:\windows\boot.ini’
    • unicode字符串:u'kajsdkf'在python中,字符串可以用单引号括起来,也可以用双引号,这两种方式是等价的,如果用单号那么在字符串中就可以直接收写双引号了,反之亦然。这就是python为什么允许用两种方式的原因。在实际应用中,单引号和双引号用得比较多,有两种表示方式后,就不用老用转义字符了。在python中,如果可能都会转成单引号的形式。
      三引号的形式用来输入多行文本,也就是说在三引号之间输入的内容将被原样保留,之中的单号和双引号不用转义,其中的不可见字符比如\n和\t都会被保留。
      比如创建一个只有一个数字1的文本文件,那么实际保存到电脑的时候保存的是什么呢?是49,而不是想当然的1。这就是一般电脑上用的ASCII编码。在ASCII编码中,每一个字符都用一个字节来表示,也就是说这种编码最多可以表示127个字符。在这127个字符中,有一些是不可见的,比如“return”“tab”“backspace”,还有一些是不能直接从键盘中输入的,比如“bell”。这时候就要用到转义字符,所谓的转义字符,只是规定的一些特殊的符号来代表一些不可见的字符或不能直接输入的字符。转义的字符的形式一般是一个‘\‘再加上一个或多个字符。比如:
    • bell       \a
    • tab         \t
    • newline     \n
    • vtab         \v
    • backspace  \b
    • NULL         \0这时就有一个问题,由于\被用来当作转义字符的标记了,如果要在字符串中包括\怎么办呢?类似的还有单引号和双引号,它们已经用来标记字符串的开始和结束。也是用转义字符:
      • \                \\
      • '                \'
      • "                \"
      除了这些之外,有时,还要直接让电脑保存一个数字,比如说就让电脑把ACSII编码表中的第49个字符写到文件中,甚至还有可能要求把不在ACSII中的编号写进去,这也要用到转义字符:
      • 49        \061        #八进制
      • 49        \0x31      #十六进制
      在一些特殊的情况下,比如输入windwos中的目录名,由于\已经被windows作为目录分隔符。如果要在python中输入一个windows目录,比如“c:\windows\boot.ini”就要被写成"c:\\windows\\boot.ini",很不直观,也容易出错。这时可以用r在字符串前关掉字符串中的转义。r是raw的意思。这样的话可以写成r'c:\windows\boot.ini'。raw字符串还有一个重要的应用,就是用在"模式匹配中,python中模式匹配的模块为re。
      在ACSII中一个字符是用一个字节来表示的,这种编码在表示英文的时候一点问题都没有,英文只有26个字母,外加标点符号也不会超过127个。但对于中文或日文、韩文这就问题大了。因为仅中文就有下上万个汉字,因此不能用ASCII了,python提供的解决方案是unicode,这也是windows的解决方案。在unicode中,一个字符用4个字节来表示(原来的unicode用两个字节),因此为了表示unicode字符串,需要在字符串前加上u。有了两种编码,就涉及到相互之间转换的问题。
      • 由unicode到ASCII:    str()
      • 由ASCII到unicode:    unicode()
      如果在把一个普通的字符串和一个unicode字符串连接起来(用+),那么普通字符串就会被转成unicode的,结果也是unicode。由于unicode用的保存字节数都不一样,因此unicode有两种特殊的转义字符,用来输入unicode编码:
      两个字节:        \uafff
      四个字节:        \Uafffffff