09.70%的Python编程都是在与字符串打交道-数据类型(二)

青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列

字符串是所有程序及编程语言中最为常见、最为重要的数据类型之一,关于字符串的编程非常灵活,学起来也相对要复杂一些,大家只要多练、多上机操作、多应用,仍然能很快熟悉起来了。本节我们先来看看如何创建字符串。

通常情况下,对于单行(没有换行)的字符串,我们可以采用英文单引号(’),也可采用英文双引号(")把字符串首尾引起来即可,如下所示:

x = 'Hello World!'
y = "Hello World!"
print(x)
print(y)

输出结果如下所示,两种方法输出的结果是完全一样的。

Hello World!
Hello World!

对于究竟是使用单引号还是双引号,两者没有特别的差异,这里仅仅谈一个小技巧,一般情况下:

  • 如果字符串自身已经含有了英文单引号字符,那么我们就在外侧采用双引号引起来;
  • 如果字符串自身已经含有了英文双引号字符,那么我们就在外侧采用单引号引起来。
    总之,内外引号的类型相互回避,为了一个目的:避免电脑混淆,避免把Python编程格式所要求的首尾引号与字符串自身里的引号弄混了。
x = "I'm a student."
print(x)
y = 'I'm a student.'

对于上述3行代码,第2行会成功输出如下结果。而第3行却会报错,原因在于:程序解释器首先会根据字符串前面的引号情况,认定该字符串是用单引号引起来的,接着会寻找另外一个最近的单引号,并把两单引号之间的内容,即“I”,作为完整的字符串输入,而其后的其他所有字符则认为是非法字符。

I'm a student.

讲到这里,大家可能会提问了:“要是字符串自身既包含单引号又包含双引号,那怎么办呢?”,Python早已经为我们想到了这个问题,可以采用三引号(三个紧连在一块的英文单引号或者三个紧连在一块的英文双引号),毕竟三个紧连在一块的单引号或者双引号在日常应用程序的字符串中出现的可能性极低。在使用方法上,三引号与单引号、双引号完全一样,把字符串首尾都用三引号引起来即可,但三引号还拥有单引号和双引号不具备的额外功能:可以支持多行字符串的直接输入,如下所示:

x = '''I'm a student, 
I like Python.
I want to say:"Hello World!"'''

输出结果为:

I'm a student, 
I like Python.
I want to say:"Hello World!" 

接着,介绍另外一种更常规化的方法,但使用起来相对更麻烦些,对于上面提到的单引号、双引号,以及换行等特殊字符,可以采用转义字符的方式,比如:

  • 采用“’”代替单引号“’”;
  • 采用“"”代替双引号“"”;
  • 采用“\n”代替换行;
  • 采用“\”代替反斜杠本身“\”。
    在这里,反斜杠,即“\”,叫做转义字符,Python解释器只要看到了字符串中的反斜杠,就会结合其后面的字符一块,反向映射、理解成其原本替代的真实字符。如下代码所示:
x = "I'm a student, \nI want to say:\"I like Python!\""
print(x)

输出结果为:

I'm a student, 
I want to say:"I like Python!"

简单说明一下:

  • 因为上述代码采用的是双引号字符串,所以要对字符串自身包含的所有双引号采用转义字符进行转义,即需要把所有的双引号替代成“反斜杠”+“双引号”的形式,避免了程序解释器在进行字符串首尾匹配时,把字符串自身包含的双引号作为了字符串尾部的配对引号(大家有没有觉得反斜杠转义字符就像盾牌一样,保护着其后的字符,寻求特殊对待);
  • 因为采用的是双引号字符串,所以对于字符串自身包含的单引号可采用转义形式,也可不转义,不会造成解释器的混淆;
  • 另外,因为只有三引号才支持多行(在编程代码中直接输入的回车换行),对于单引号字符串或者双引号字符串,要想变通地支持多行的话,在换行处加上转义换行符即可,即“\n”;
  • 同时,需要注意的是:任何时候在字符串中包含反斜杠的时,都需要有对其自身进行转义,即用两个反斜杠代替原来的每个反斜杠。

看似上面的各种解决手段已经很丰富了,但在实际编程应用中,仍然存在一些特殊场合,使用起来很不方便,比如,大家在编写前端网页程序,以及涉及正则表达式或者文件路径时,都会存在大量单引号、双引号以及反斜杠,若全部采用转义字符的话,既麻烦且导致字符串可读性变得很差。这个时候,可以采用下述方法,如下所示:

x = r'''C:\Windows;I'm a student, \nI want to say:"I like Python!"'''
print(x)

输出结果为:

C:\Windows;I'm a student, \nI want to say:"I like Python!"

上述方法通过在字符串前面加上“r”(或者“R”),解释器则对字符串里的所有字符不再进行转义,而是按原样输出。但是,需要注意以下几点:

  • 若为多行字符串,仍然需要采用三引号;
  • 若字符串里既有单引号又有双引号,则只能采用三引号,除此之外,按照前面提到的技巧,单引号与双引号相互回避即可;
  • 对于三引号的使用,是采用三个单引号,还是采用三个双引号呢?需要根据具体情况灵活变通,还是以上面的代码为例,字符串以"I like Python!"结束,很显然,字符串本身在结尾处有一个双引号,此时若采用三个双引号的方式,会导致字符串结尾处有四个双引号,Python解释器在对字符串前后的三个双引号进行配对时,则会认为结尾多了个双引号(按照就近匹配的原则,把字符串本身结尾处的双引号纳入到三引号匹配了),因此会报错,所以在这种情况下,直接采用三个单引号字符串就行了。

青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值