2.2节讲过,Python中有字符串类型。在Python中,字符串用'或"括起,例如'abc'、"qwerty"等都是字符串。注意'和"并不是字符串的内容。

ASCII(American Standard Code for Information Interchange)码

电脑可以存储数字,那字符怎么办?答案是可以给字符编码,这样只要存储数字,显示时转成字符就可以了。由于电脑是美国人发明的,因此电脑最初只有128个(不是很确定)字符被编码,叫做ASCII码,范围为0~127。例如字母A的ASCII码为65,字母d的ASCII码为100。

一个8位无符号整数的存储范围是0~255,因此存储ASCII字符只需要一个字节。

此外,还有扩展的ASCII编码,范围为0~255。前128个字符是一样的,后128个则是例如â、é这样的带有注音符号的字符。这里不详细介绍。

Unicode

因为世界上不仅有英语,还有其它语言,其它语言中又有更多的字符。因此ASCII码不能满足要求,需要一个新的字符集——Unicode。Unicode包含了世界上大多数语言的字符。例如中文的“我”字,Unicode码为25105,“文”字是25991。对于一个ASCII字符,其Unicode编码与ASCII编码是一样的。Unicode的0~128范围就是ASCII字符。

一般字符需要2个字节进行存储,很偏僻的就需要4个字节。

字符串和字符串常量

根据字符的概念,字符串可以被重新定义成若干字符的组合。Python中的字符串类型为str,采用Unicode编码。因此里面可以使用Unicode字符(例如中文)。Python中没有单独的字符类型。

字符串常量就是指像"python"、'globe'这些不变的字符串,与变量相对。

转义字符/序列(escape character/sequence)

字符串里不仅能包含普通字符,还可以包含特殊字符。这些特殊字符就需要通过特殊方法表示出来,这种字符叫做转义字符。在Python中,转义字符以\开头。因为转义字符在代码中需要用两个字符表示,也叫做转义序列

在字符串中,你可能想换行,这时就可以使用\n转义字符;你可能想要tab,这时你可以直接打tab或使用\t转义字符(推荐后者)。

例如:

>>> print('first line\nsecond line\nthird line')
first line
second line
third line

与下面:

print('first line')
print('second line')
print('third line')

或下面:

>>> print('first line')
first line
>>> print('second line')
second line
>>> print('third line')
third line

是相同的。

对于\t也是一样的:

>>> print('1\t2\t3\t4\tend')
1 2 3 4 end

还有一些容易造成歧义的字符,例如'、"和\('和"会被以为成字符串的开始或结束,\会认为是转义符号),也需要使用转义序列\'、\"和\\才能输出:

>>> print('You must use \\\', \\\" and \\\\ to display \', \" and \\.')
You must use \', \" and \\ to display ', " and \.

当然,对于只含有'的字符串,可以用"括起;对于只含有"的字符串,可以用'括起。例如:

>>> print('"All right", he says.')
"All right", he says.
>>> print("I'm OK.")
I'm OK.

至于既有'又有"的字符串就只能用转义序列或者(下文即将讲到的)原始字符串了。

原始字符串(raw string)

Python支持原始字符串。这种字符串内的字符都是原始的,没有转义。转义字符串用r' '括起,例如:

>>> r'this \n does not mean newline'
'this \\n does not mean newline'

不过注意,Python在不用print()显示字符串时,是会加上转义符号\的。

多行字符串

有时候,字符串里有很多换行符不够方便,这时可以使用多行字符串。多行字符串用''' '''或""" """(每边3个'或3个")括起,里面的enter被看作换行符。例如:

>>> print('''first line
... second line
... third line''')
first line
second line
third line

注意输入多行字符串时,在字符串结束之前,命令提示符也会变成...。

在多行字符串一行结尾加\可以防止换行:

>>> print('''\
... first line
... second line
... third line\
... ''')
first line
second line
third line

还可以用r'''...'''和r"""..."""表示原始多行字符串,请自己尝试。

字符串操作

计算长度

使用len()函数计算字符串长度。例如:

>>> len('GoldenGlobalView')
16
>>> s = 'internationalization'
>>> len(s)
20
>>> len('Unicode字符串')
10

获取字符串中的某个字符

使用string[index]可以获取字符串string索引(index,也叫下标、位置)为index的字符:

>>> s = 'Python Tutorial'
>>> s[0]
'P'
>>> s[5]
'n'
>>> s[12]
'i'

注意索引从0开始,0索引对应第一个字符,1对应第二个,2对应第三个,等等。

如果索引太大,就会出现错误:

>>> s[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

与C/C++不同,索引也可以是负数:

>>> s[-1]
'l'
>>> s[-4]
'r'
>>> s[-10]
'n'

-1的索引表示最后一个字符,-2表示倒数第二个,-3表示倒数第三个,以此类推。

索引太小也不行:

>>> s[-100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

注意虽然这样可以获取字符串中的某个字符,但是获取的仍然是字符串类型,只是长度为1。Python没有单独的字符类型。

拼接字符串常量

两个或多个字符串常量可以直接写在一起,进行拼接(concatenation):

>>> 'class''mate'
'classmate'
>>> "pyt""hon"
'python'
>>> 'note'"book"
'notebook'
>>> 'un''believ''able'
'unbelievable'

注意两个字符串可以一个用'括起,一个用"括起。一般将这种技巧用于长字符串:

>>> print('We often cut a long string '
... 'into several lines.')
We often cut a long string into several lines.

拼接字符串

如果是一个类型为str的变量和一个字符串常量,就不能直接写在一起进行拼接了:

>>> s = 'class'
>>> s 'mate'
File "<stdin>", line 1
s 'mate'
^
SyntaxError: invalid syntax

这时需要用+运算符:

>>> s = 'class'
>>> s + 'mate'
'classmate'

+运算符也可以用于两个str变量之间:

>>> s1 = 'class'
>>> s2 = 'mate'
>>> s1 + s2
'classmate'

字符串乘整数

在Python中,假设s是一个字符串,n是个整数,则s*n和n*s表示将s重复n次。

例如:

>>> 'py' * 2
'pypy'
>>> 3 * 'un' + 'known'
'unununknown'

n小于等于0时,字符串为空:

>>> 'str' * 0
''
>>> 'egg' * -2
''

格式化字符串

最后来看一看字符串的格式化

有时候我们需要输出一个含有很多变量的句子,例如“xx,性别xx,xx岁,职业xx”。对于比较简单的,可以直接用print()输出:

>>> print('He is', age, 'years old.')

复杂一些的呢?

>>> name = 'Mike'
>>> gender = 'male'
>>> age = 25
>>> job = 'programmer'
>>> print(name, ',', gender, ',', age, ', is a(n)', job)
Mike , male , 25 , is a(n) programmer

可以看到,这里使用print()显得十分繁琐,而且因为print()的工作原理,输出含有多余的空格。

前面说过,可以通过指定print()的sep参数改变分隔符:

>>> print(name, ', ', gender, ', ', age, ', is a(n) ', job, sep='')    # indicate an empty string as separator
Mike, male, 25, is a(n) programmer

但这还是很繁琐。

这时就可以用格式化字符串使代码更美观了。一个简单的例子如下:

>>> print('Hello, %s' % 'world')
Hello, world

注意中间部分:

'Hello, %s' % 'world'

前面是一个字符串,'Hello, %s'。中间的%s是一个占位符,表示这里应该有一个字符串(str)。接下来是一个%,表示格式化字符串。后面是一个字符串'world',对应于前面的%s。Python将会分析上面代码,然后把'world'替换%s,得到'Hello, world!',传给print(),最后输出。

更难一点的例子:

>>> print('%d - %d = %d' % (10, 6, 10 - 6))
10 - 6 = 4

'%d - %d = %d'中有3个占位符%d,表示整数(int)。%后面的10、6、10-6分别对应于第一个、第二个和第三个%d,Python会将3个%d,按照位置顺序,分别替换成10、6、10-6的结果4,于是整个字符串变成'10 - 6 = 4',然后输出。

那么前面的例子就解决了:

>>> print('%s, %s, %d, is a(n) %s' % (name, gender, age, job))
Mike, male, 25, is a(n) programmer.

Todo

1. 字符串编码问题

2. 第二提示符

3. 格式化占位符

小结

1. 字符集有ASCII字符集和Unicode字符集。

2. Python中的字符串类型为str

3. Python没有单独的字符类型,一个字符就是一个长度为1的str。

4. 转义字符以\开头,常见的有\n、\t、\'、\"、\\。

5. 原始字符串用r'...'或r"..."表示。

6. 多行字符串用'''...'''或"""..."""表示。

7. 原始多行字符串用r'''...'''或r"""..."""表示。

8. 使用len()函数计算字符串长度。

9. 使用string[index]获取字符串stringindex位置上的字符(注意返回的是一个长度为1的str)。

10. 将两个字符串常量写在一起可以拼接。

11. 字符串可以用+运算符进行拼接。

12. string*num表示将string字符串重复num次。

Python教程(2.4)——字符串的更多相关文章

  1. python教程6-2:字符串标识符

    标识符合法性检查. 1.字母或者下划线开始. 2.后面是字母.下划线或者数字. 3.检查长度大于等于1. 4.可以识别关键字. python35 idcheck.py  idcheck.py impo ...

  2. Python 1-5】Python教程之——字符串

    字符串或串(String)是由数字.字母.下划线组成的一串字符. 字符串 字符串就是一系列字符.在Python中,用引号括起的都是字符串,其中的引号可以是单引号, 也可以是双引号,如下所示: &quo ...

  3. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  4. (原+转)简明 Python 教程:总结

     简明 Python 教程 说明:本文只是对<简明Python教程>的一个总结.请搜索该书查看真正的教程. 第3章 最初的步骤 1. Python是大小写敏感的. 2. 在#符号右面的内容 ...

  5. Python教程(2.2)——数据类型与变量

    和C/C++.Java一样,Python也有数据类型和变量两个概念. 数据类型 Python中的几个基本数据类型为整数(integer/int).浮点数(float/float).布尔值(boolea ...

  6. 笔记|《简明Python教程》:编程小白的第一本python入门书

    <简明Python教程>这本书是初级的Python入门教材,初级内容基本覆盖,对高级内容没有做深入纠结.适合刚接触Python的新手,行文比较简洁轻松,读起来也比较顺畅. 下面是我根据各个 ...

  7. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  8. 《简明Python教程》学习笔记

    <简明Python教程>是网上比较好的一个Python入门级教程,尽管版本比较老旧,但是其中的基本讲解还是很有实力的. Ch2–安装Python:下载安装完成后,在系统的环境变量里,在Pa ...

  9. 学以致用:Python爬取廖大Python教程制作pdf

    当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个想法. 想要把教程变成PDF有三步: 先生成空html,爬取每一篇教程放进一个新生成的div,这样就 ...

随机推荐

  1. 第二章 Struts 2的应用

    2.1 Struts 2的应用    2.1.1 使用步骤        1.创建web项目,添加jar包,创建helloWorld.jsp页面        2.创建HelloWorldAction ...

  2. elasticsearch系列(一) 术语

    elasticsearch(以下简称es)是一款开源的搜索引擎,基于apach lucene.最近在做nlp的时候顺便研究一下. 下面是官方列举的术语解释 Near Realtime 接近实时的查询, ...

  3. SAP RFC函数远程调试跟踪管理软件

    最近在搞OA系统与sap的接口开发,接口太多老是和.net的开发人员打嘴仗,为了避免不必要的纠结,自己做了一个rfc的调试工具,有些问题调试起来也比较容易了.程序是delphi开发的,为了保证程序可以 ...

  4. 读书笔记 effective c++ Item 53 关注编译器发出的警告

    许多程序员常常忽略编译器发出的警告.毕竟,如果问题很严重,它才将会变成一个error,不是么?相对来说,这个想法可能在其它语言是无害的,但是在C++中,我敢打赌编译器的实现者对于对接下来会发生什么比你 ...

  5. FrameBuffer系列 之 介绍

    1.     来由 FrameBuffer是出现在2.2.xx内核当中的一种驱动程序接口.Linux工作在保护模式下,所以用户态进程是无法象 DOS 那样使用显卡 BIOS里提供的中断调用来实现直接写 ...

  6. 最大流算法之EK(最短路径增广算法)

    这是网络流最基础的部分--求出源点到汇点的最大流(Max-Flow). 最大流的算法有比较多,本次介绍的是其中复杂度较高,但是比较好写的EK算法.(不涉及分层,纯粹靠BFS找汇点及回溯找最小流量得到最 ...

  7. OC中Foundation框架之NSArray、NSMutableArray

    NSArray概述 NSArray是OC中的数组类 NSArray特点 )只能存放任意OC对象,并且是有顺序的 )不能存放非OC对象,比如int/float/double/char/enum/stru ...

  8. iOS之RunLoop

    RunLoop是iOS线程相关的比较重要的一个概念,无论是主线程还是子线程,都对应一个RunLoop,如果没有RunLoop,线程会马上被系统回收. 本文主要CFRunLoop的源码解析,并简单阐述一 ...

  9. 用ajax判断用户是否已存在?----2017-05-12

    首先在用ajax之前,先说一下JSON: JSON:javascript object notation   js对象标记 对于json,我们只需要知道如何定义json?如何输出?怎么遍历? 1.定义 ...

  10. poj2774 Long Long Message 后缀数组求最长公共子串

    题目链接:http://poj.org/problem?id=2774 这是一道很好的后缀数组的入门题目 题意:给你两个字符串,然后求这两个的字符串的最长连续的公共子串 一般用后缀数组解决的两个字符串 ...