从这章节开始我们将会通过代码来讲解知识,因为考虑到每章节的篇幅问题,可能会有很多代码上的东西都没法现在全讲解,但是和章节相关的肯定会讲解。很多初学者可能看不懂代码,不用担心,这些不懂的在后面都会讲解到。现在只要知道可以这么用,这么用能做什么,模仿就行。

数字(Number)

数字是我们使用最频繁的一种数据类型,无论在什么时候都会用上,在Python中,数字数据类型可以分为4类,分别是整数型、浮点型、布尔型、复数型,前三种是用的最多的,而复数用的并不多,除非你是用来做科学计算用。

其中布尔型是一种特殊的数字类型,它是用数字来记录,但它的含义却是其他,这个后边会讲解。

不管是整型,浮点型,布尔型还是复数型,它们在python里都属于数字类型。

graph TD; 数字数据类型 --> 整型 数字数据类型 --> 浮点型 数字数据类型 --> 布尔型 数字数据类型 --> 复数型

整数型(int)

整数是最容易的,就是不含小数的数字,比如1,95,-32,这就是整数,无论是正整数还是负整数,只要是个整数就可以。整数在python里用int表示,无论正负。

1
print(type(1),type(-56))

运行结果

1
<class 'int'> <class 'int'>

首先先说明下代码,print()可以理解为在显示屏上打印,而括号里的就是将要打印出来的东西,代码里写了type(1)type(-56)type()可以用来查看括号里的数据是什么类型。他们不是关键字,而是内置函数,这都会在后面的章节详细的讲解

运行结果显示的是两个<class 'int'>,这表示的是个整数型的类,什么是类现在还不用知道,只要知道结果是个整型的。

这里扩展个知识,在编译型语言里,整型(int)是会规定大小的,比如C语言。int规定大小,到底多大那就得看你的系统和编译器了,一旦超出范围将会出现溢出的现象。但是Python作为动态类型语言,没有限制大小,但是由于机器内存的问题,也不是无限大,只是说不用担心超出范围溢出的问题。

浮点型(float)

可以简单的理解就是小数,比如1.24,-3.14,反正就是带有小数点的数,比如1.0,这也是个浮点型的数字,即使小数部分是个0。浮点型在python用float表示

1
print(type(1.24),type(-3.14),type(1.0))

运行结果

1
<class 'float'> <class 'float'> <class 'float'>

从结果就可以看出<class 'float'>,浮点型的类,也就是说代码里的数字都是浮点类型,1.0也是个浮点类型。

当一个浮点型数据的位数非常多的时候,显然一个一个位数输入很容易出错,而且也不方便阅读,所以通常都会用科学计数法。比如1.6856e2表示的是168.56,再比如1.2597e-1表示的是0.12597

1
2
print(1.6856e2,type(1.6856e2))
print(1.2597e-1,type(1.2597e-1))

运行结果

1
2
168.56 <class 'float'>
0.12597 <class 'float'>

科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。当我们要标记或运算某个较大或较小且位数较多时,用科学记数法免去浪费很多空间和时间。

aEb=a10b1.6856e2=1.68561021.6856e2=1.68561001.6856e2=168.56\begin{aligned} aEb &= a * 10^b \\ 1.6856e2 &= 1.6856 * 10^2 \\ 1.6856e2 &= 1.6856 * 100 \\ 1.6856e2 &= 168.56 \\ \end{aligned}

布尔型(bool)

布尔型是个比较特殊的类型,本应该放在单独的章节说的,但是布尔确实是可以用数字表示,0表示假,除了0以外的数字表示真,默认是1,数字表示只是它的一种变相表示,正真的表示应该是TrueFalse这两个单词,True表示真,False表示假,注意第一个字母要大写,常常用来做比较判断,比如1大于5,这明显是不可能的,那就是假,用数字表示就是0,再比如100大于10,这是真的,用数字表示就是1,关于布尔型的其他知识会在后面专门单独讲解。布尔型在python用bool表示

1
print(type(True),type(False))

运行结果

1
<class 'bool'> <class 'bool'>

结果显示的都是<class 'bool'>,布尔型的类。
前面说到布尔型可以用数字表示,我们可以用int()来把布尔型转换成数字,用bool()把数字转换成布尔型。

1
2
print(int(True),int(False))
print(bool(1),bool(0),bool(-1),bool(15.15))

运行结果

1
2
1 0
True False True True

运行的结果显示,True的数字是1,False的结果是0,反过来除了0是False,其他的数字都是True

复数型(complex)

这个类型用的真的不多,除非是做相关的数学计算,但是也很少会有复数的数学计算,所以用的少之又少,只要了解即可。在高中应该都有学过复数,复数包括两个部分,一个是实部,一个是虚部,实部就是平时的数字表示,虚部就是加个字母j。复数在python用complex表示。

1
print(type(1j))

运行结果

1
<class 'complex'>

结果是<class 'complex'>,复数型的类。

字符串(String)

字符串从字面上来理解就是串在一起的字符,那什么是字符,字符其实就是一个字,比如A,再比如汉字我,都是一个字,当多个字拼接在一起的时候就组成了字符串。比如ABCD,多个字符拼接在一起,看上去就像串一样,所以就叫做字符串。字符串就是多个字符拼接在一起。

在基本数据类型的章节里提到,字符串是基本数据类型,那为什么字符不是基本类型呢,因为在python没有字符,因为设计人员觉得,一个字叫字符,很多个字符拼在一起叫字符串,干脆都叫字符串好了,这样就不会混淆字符和字符串了,所以在python统称为字符串。

字符串的多种表示

在python里,字符串要用一对引号引起来,表示是个字符串,我们知道引号可以分为单引号,双引号,那到底用哪个?答案就是都可以,不仅仅这两种,python还可以用三单引号和三双引号来表示字符串,但是它们都有各自的特点。

无论是哪种引号,都必须是英文的引号'或者"

单引号

单引号就是一对只有一个引号的符号,就是长这样'...',用单引号来表示字符串,在单引号里可以是单引号除外的任何字符,为什么除单引号呢,在后面会详细讲解。

1
2
print('今天天气真好啊')
print(type('今天天气真好啊'))

运行结果

1
2
今天天气真好啊
<class 'str'>

打印出来的第二句是<class 'str'>,是个字符串类型的类。

双引号

双引号和单引号差不多,就是用"..."来表示,除了双引号,其它任何字符都可以。

1
2
print("适合睡觉")
print(type("适合睡觉"))

运行结果

1
2
适合睡觉
<class 'str'>

结果和单引号的没啥区别。

三引号

最后来说说三引号,它既可以是单引号,也可以是双引号,无论是哪个,它的作用和效果都一样,它长这样'''...'''或者"""..."""这样,虽然三引号有很多引号组成,但效果和前面的一样。这里就不再限制单引号和双引号的字符了。

1
2
3
print('''睡什么,起来嗨''')
print("""睡什么,起来嗨""")
print(type('''睡什么,起来嗨'''),type("""睡什么,起来嗨"""))

运行结果

1
2
3
睡什么,起来嗨
睡什么,起来嗨
<class 'str'> <class 'str'>

三种表示的区别和用途

前面的单引号和双引号的描述里,都说了除了本身引号以外,其他字符都可以,他们除了这一点不同,其他都没什么不同。但是,它们是有区别,除了引号数量不一样,还有本质上的不同,在这就要重点讲解这个,因为之后可能用的很多,也很有用。

我们先从单引号说起,前面说单引号除了单引号以外的其他字符都可以,理由还得从字符串的表示方式说起,字符串是靠引号来表示的,引号是有始有终的,也就是成对出现,我们用英文I’m fine!来演示。

1
print('I'm fine!')

运行结果

1
2
3
4
    ...
print('I'm fine!')
^
SyntaxError: invalid syntax

结果输出很长一段,显然不是我们要的结果,从最后一句可以看出这是一个错误,我们省略掉前面,只看最后两句。倒数第二句print(‘I’m fine!’),表示出错的代码,^表示出错代码的哪一地方出错了,这里指的是m,最后一句SyntaxError: invalid syntax,翻译过来就是语法错误:无效语法。所以结合起来就是,print(‘I’m fine!’)这句代码的m是个无效的语法,为什么会这样呢,答案就是缺失了引号。

将’I’m fine!‘拆分开来,第一对引号是’I’,剩下的只有一个引号了,没法成对,所以m fine!'不是字符串,也不是其他Python没能识别的代码。所以就会出错。要解决这个问题我们可以使用双引号。

1
print("I'm fine!")

运行结果

1
I'm fine!

可以看到运行没什么问题,那问题又来了,如果是双引号里有双引号呢,原理和单引号一样,那么我们可以用单引号来解决这个问题。

从这我们看出了问题,当我们在字符串里想用单引号的时候,就没法再用单引号来表示字符串,要用双引号或者三引号,加入字符串里有双引号呢?可以反推,前面是一对,后面是什么?所以当字符串里有双引号的时候就不能用双引号来表示。

1
print('你看"在单引号中间')

运行结果

1
你看"在单引号中间

运行也同样没有什么问题,可能有人就会问了,那我既要有单引号又要有双引号怎么办,这时候三引号的用处就体现出来了,三引号是成对的三个引号,既可以满足有单引号,也可以满足有双引号。

1
2
3
4
print('''我要换行
你不要拦着我
我不管
''')

运行结果

1
2
3
我要换行
你不要拦着我
我不管

这里为什么括号也可以换行是因为这是函数,括号在哪不重要,重要是的它是一对的。

了解了三种引号的区别之后,我们来说说都会在什么情况下用哪种引号,一般情况下,三引号是不会作为实际代码使用的,三引号主要用来做文档注释(注释的一种,按照规定的规则注释,可以通过特殊方法生成一份文档)。单引号和双引号则会看具体字符串使用,一般没有特殊情况下会使用双引号,这主要是大部分编程语言都是用双引号来表示字符串的,这里为了统一所以一般会用双引号来表示。

转义字符

前面已经了解了三种引号的区别和应用场景,但是为了统一代码,我们都应使用双引号,但是双引号又不能表示双引号字符,为了解决这种尴尬的问题,可以使用转义字符。

转义字符 意义
\a 响铃(BEL)
\b 退格(BS) ,将当前位置移到前一列
\f 换页(FF),将当前位置移到下页开头
\n 换行(LF) ,将当前位置移到下一行开头
\r 回车(CR) ,将当前位置移到本行开头
\t 水平制表(HT) (跳到下一个TAB位置)
\v 垂直制表(VT)
\\ 代表一个反斜线字符\
\’ 代表一个单引号字符
\" 代表一个双引号字符
? 代表一个问号
\0 空字符(NUL)
\ddd 1到3位八进制数所代表的任意字符
\xhh 十六进制所代表的任意字符

表格里是所有转义字符,转义字符以\开头,其中最常用的转义字符有\n\t\\\'\"。这几个是最常用的,也是必须记住的。

\n是换行,就是换一行从头开始。\t是水平制表符,就是键盘Tab这个键。\'\"是引号,分别是单引号和双引号,\\是反斜杠,就是用来表示\。

1
2
3
print("我要换行\n上面的换行了")
print("我是制表符\t呵呵")
print("我是单引号\',我是双引号\",我是反斜杠\\")

运行结果

1
2
3
4
我要换行
上面的换行了
我是制表符 呵呵
我是单引号',我是双引号",我是反斜杠\

运行完全没有问题,可以看到,通过转义字符可以很容易解决单双引号的问题。