简单地理解,字符串就是“一串字符”,也就是用引号包裹的任何数据,比如“Hello,Charlie”是一个字符串,“12345”也是一个字符串。

Python 要求,字符串必须使用引号括起来,可以使用单引号或者双引号,只要成对即可。字符串中的内容几乎可以包含任何字符,英文字符也行,中文字符也行。

Python 3.x 对中文字符支持较好,但 Python 2.x 则要求在源程序中增加“#coding:utf-8”才能支持中文字符。

至于字符串是用单引号括起来,还是用双引号括起来,在 Python 语言中,它们没有任何区别。比如说:

  1. str1 = 'c.biancheng.net'
  2. str2 = "C语言中文网"
  3. print(str1)
  4. print(str2)

但需要说明的是,Python 有时候没有我们期望的那么聪明。如果字符串内容本身包含了单引号或双引号,此时就需要进行特殊处理:

  1. 使用不同的引号将字符串括起来。
  2. 对引号进行转义。

先看第一种处理方式。假如字符串内容中包含了单引号,则可以使用双引号将字符串括起来。例如:

str3 = 'I'm a coder'

由于上面字符串中包含了单引号,此时 Python 会将字符串中的单引号与第一个单引号配对,这样就会把 'I' 当成字符串,而后面的 m a coder' 就变成了多余的内容,从而导致语法错误。

为了避免这种问题,可以将上面代码改为如下形式:

str3 = "I'm a coder"

上面代码使用双引号将字符串括起来,此时 Python 就会把字符串中的单引号当成字符串内容,而不是和字符串开始的引号配对。

假如字符串内容本身包含双引号,则可使用单引号将字有串括起来,例如如下代码:

str4 = '"Spring is here,let us jam!", said woodchuck.'

接下来看第二种处理方式:使用转义字符。Python 允许使用反斜线(\)将字符串中的特殊字符进行转义。假如字符串既包含单引号,又包含双引号,此时就可以使用转义字符,例如:

str5 = '"we are scared,Let\'s hide in the shade",says the bird'

通过使用转义字符,向 Python 解释器表明了此单引号并不是和最前面的单引号进行配对的另一半,从而避免了发生语法错误。

此外,Python 不是格式自由的语言,它对程序的换行、缩进都有其规定的语法。Python 允许使用转义字符(\)对换行符进行转义,转义之后的换行符不会“中断”字符串。例如:

  1. s2 = 'The quick brown fox \
  2. jumps over the lazy dog'
  3. print(s2)

上面 s2 字符串的内容较长,故程序使用了转义字符(\)对内容进行了转义,这样就可以把一个字符串写成两行。

同样的,Python 的表达式也不允许随便换行。但如果程序需要对 Python 表达式换行,就需要使用转义字符(\),例如:

  1. num = 20 + 3 / 4 + \
  2. 2 * 3
  3. print(num)

上面程序中有一个表达式,为了对该表达式换行,程序用到了转义字符。

有关转义字符,后续章节会做详细介绍。

Python长字符串

前面介绍 Python 多行注释时,提到使用三个引号(单引号、双引号都行)来包含多行注释内容,其实这是长字符串的写法,只是由于在长字符串中可以放置任何内容,包括放置单引号、双引号都可以,如果所定义的长字符串没有赋值给任何变量,那么这个字符串就相当于被解释器忽略了,也就相当于注释掉了。

实际上,使用三个引号括起来的长字符串完全可以赋值给变量,例如如下程序:

  1. s = '''"Let's go fishing", said Mary.
  2. "OK, Let's go", said her brother.
  3. they walked to a lake'''
  4. print(s)

上面程序使用三个引号定义了长字符串,该长字符串中既可包含单引号,也可包含双引号。

当程序中有大段文本内容要定义成字符串时,优先推荐使用长字符串形式,因为这种形式非常强大,可以让字符串中包含任何内容,既可包含单引号,也可包含双引号。

Python原始字符串

由于字符串中的反斜线都有特殊的作用,因此当字符串中包含反斜线时,就需要使用转义字符 \ 对字符串中包含的每个 '\' 进行转义。

比如说,我们要写一个关于 Windows 路径 G:\publish\codes\02\2.4 这样的字符串,如果在 Python 程序中直接这样写肯定是不行的,需要使用 \ 转义字符,对字符串中每个 '\' 进行转义,即写成 G:\\publish\\codes\\02\\2.4 这种形式才行。

有没有觉得这种写法很啰嗦,有没有更好的解决办法呢?答案是肯定的,借助于原始字符串可以很好地解决这个问题。

原始字符串以“r”开头,它不会把反斜线当成特殊字符。因此,上面的 Windows 路径可直接写成如下这种形式:

  1. s1 = r'G:\publish\codes\02\2.4'
  2. print(s1)

如果原始字符串中包含引号,程序同样需要对引号进行转义(否则 Python 同样无法对字符串的引号精确配对),但此时用于转义的反斜线会变成字符串的一部分。

例如如下代码:

  1. # 原始字符串包含的引号,同样需要转义
  2. s2 = r'"Let\'s go", said Charlie'
  3. print(s2)

上面代码会生成如下输出结果:

"Let\'s go", said Charlie

由于原始字符串中的反斜线会对引号进行转义,因此原始字符串的结尾处不能是反斜线,否则字符串结尾处的引号会被转义,导致字符串不能正确结束。

如果确实要在原始字符串的结尾处添加反斜线怎么办呢?一种方式是不要使用原始字符串,而是改为使用长字符串写法(三引号字符串);另一种方式就是将反斜线单独写。

例如如下代码:

  1. s3 = r'Good Morning' '\\'
  2. print(s3)

上面代码开始写了一个原始字符串 r'Good Morning',紧接着程序使用 '\\' 写了一个包含反斜线的字符串,Python 会自动将这两个字符串拼接在一起。运行上面代码会生成如下输出结果:

Good Morning\

由于这种方式涉及到了字符串拼接的相关知识,这里读者只需要了解即可,后续会对字符串拼接做详细介绍。

13.Python字符串详解(包含长字符串和原始字符串)的更多相关文章

  1. Python变量和字符串详解

    Python变量和字符串详解 几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣 ...

  2. 第7.13节 案例详解:Python类变量

    第7.13节 案例详解:Python类变量 上节介绍了类变量的定义和使用方法,并举例进行了说明.本节将通过一个更完整的例子来说明. 一.    定义函数dirp def dirp(iter): ret ...

  3. C语言中字符串详解

    C语言中字符串详解 字符串时是C语言中非常重要的部分,我们从字符串的性质和字符串的创建.程序中字符串的输入输出和字符串的操作来对字符串进行详细的解析. 什么是字符串? C语言本身没有内置的字符串类型, ...

  4. SQL Server日期时间格式转换字符串详解

    本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...

  5. Swift_字符串详解(String)

    Swift_字符串详解(String) 类型别名 //类型别名 fileprivate func testTypeAliases() { let index = String.Index.self p ...

  6. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...

  7. java字符串详解

    一.String 类的定义 public final class String implements java.io.Serializable, Comparable<String>, C ...

  8. python 数据类型详解

    python数据类型详解 参考网址:http://www.cnblogs.com/linjiqin/p/3608541.html 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8 ...

  9. python数据类型详解(全面)

    python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...

  10. [转] Python Traceback详解

    追莫名其妙的bugs利器-mark- 转自:https://www.jianshu.com/p/a8cb5375171a   Python Traceback详解   刚接触Python的时候,简单的 ...

随机推荐

  1. Luogu P5221 Product

    题目 注意一下空间限制. 令\(f(n)=\prod\limits_{i=1}^n\prod\limits_{j=1}^nij,g(n)=\prod\limits_{i=1}^n\prod\limit ...

  2. python网络编程——使用UDP、TCP协议收发信息

    UDP UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送. UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内. UDP ...

  3. luogu题解 P1707 【刷题比赛】矩阵加速递推

    题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...

  4. computed、watch、methods的区别

    computed:计算属性是用来声明式的描述一个值依赖了其它的值.当你在模板里把数据绑定到一个计算属性上时,Vue 会在其依赖的任何值导致该计算属性改变时更新 DOM.这个功能非常强大,它可以让你的代 ...

  5. 解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题

    问题截图: 解决方案: 1.打开File --> Setting 窗口 2.搜索 Webpack 3.选择如下路径 问题解决

  6. 关于sqlmap的两个小坑

    i春秋作家:__LSA__ 0x00 概述 近日在利用sqlmap注入测试时遇到一个奇怪的现象,高版本sqlmap无法检测出注入,但是低版本的可以测出注入,并且能跑出数据不是误报,经过对比测试和查看s ...

  7. [转] JAVA分为三个体系,JavaSE,JavaEE,JavaME(J2ME)的区别以及各个版

        Java SE(JavaPlatform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...

  8. 3、Eclipse 的SVN 插件

    3.Eclipse 的SVN 插件 3.1 简介 Subversive Eclipse 团队开发的SVN 插件. Subclipse Apache 的SVN 团队开发的Eclipse 插件. 3.2 ...

  9. oracle 12C的新特性-CDB和PDB

    1.前言 CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插 ...

  10. dedecms 多级栏目时,调用上级栏目名称和链接

    {dede:field name='position' runphp='yes'} $tc="-"; //分隔符 $tw=$GLOBALS['cfg_list_symbol']; ...