计算机的本质就是计算,在其内部是 0
和1
的比特位的变化,对外表现就是数据的变化。那么,计算机都能处理什么数据呢?本质上,数据都是以字节(Byte)存储的,表现上看,它们就是整数、浮点数和字符串等。Python 的基本数据类型也不外乎于此。
整数和浮点数就跟数学中的一样,而字符串就是各种字符的组合。
数值类型:整数(int)、浮点数(float)
int
和 float
是 Python 中为整数和浮点数保留的关键字。
整数和浮点数(也就是小数)和我们在小学时学的一样:
Python 中的整数: int
包括 正整数
、 零
和 负整数
:3
, 0
, -20
等等。日常生活中,我们接触的整数都是十进制的,而在计算机中二进制和十六进制也是很常见的。
二进制整数用 0b
作为前缀,因为是 二进制,所以只包含 0
和1
两个字符,比如:0b101
, 0b1000
。如果包含 01
以为的字符就是错误的:
In [40]: b = 0b1003
File "<ipython-input-40-df926afcdae8>", line 1
b = 0b1003
^
SyntaxError: invalid syntax
十六进制整数用 0x
作为前缀,包含 0-9a-f
共 6 个字符,比如:0x23ab
, 0xfd39803a
。同样的十六进制只能包含它规定的 16 个字符,不过,a-f
这 6 个字母不区分大小写,也就是说 A-F
也是合法的十六进制字符。
二进制法定 01
两个字符,十六进制法定 0-9a-f
共 16 个字符,就跟十进制有 0-9
共 10 个字符是一样的。
In [46]: a = 32
In [47]: a
Out[47]: 32
In [48]: b = 0x20
In [49]: b
Out[49]: 32
In [50]: c = 0b100000
In [51]: c
Out[51]: 32
另外,布尔类型(Boolean)作为一种整数的子类型表示程序中的“是非”,它的值有且仅有两个:True
和False
。它是以后编程中条件判断、比较运算的重要概念,我们将在后面专门来讲一讲布尔类型。
Python 中的浮点数: float
浮点数就是数学中的小数,也是做数值计算中常用的类型,Python 中的写法跟数学中一样,比如:0.235
,3.1415926
,-6.5
等等。不过数值很大或很小时,浮点数就会变为科学计数法:9.8e+16
, 2e-10
。
In [68]: a = 0.000000002
In [69]: a
Out[69]: 2e-09
In [70]: b = 76000000000000000.0
In [71]: b
Out[71]: 7.6e+16
数值运算:Python 作为解释器
讲到数值类型就不得不说说数值计算,毕竟数就是拿来算的嘛。
Python 跟数学一样,支持整数和浮点数之间的四则运算加减乘除:+
,-
,*
,/
,也是用小括号 ()
来分组。比如:
In [72]: 3 + 4
Out[72]: 7
In [73]: 9-10
Out[73]: -1
In [74]: 39 + 18/3
Out[74]: 45.0
In [75]: 3 + 18*3
Out[75]: 57
In [76]: (50 - 30) / 2
Out[76]: 10.0
In [77]: 19 / 2
Out[77]: 9.5
同样也支持数学中求商数和余数的计算,比如:
a ÷ b = q…r
(13 ÷ 3 = 4…1)
其中,a 为被除数,b 为除数,q 为商数,r 为余数
Python 中求商数(floor division) 的运算符是 //
,
而计算余数 (也叫 模除 、 取模操作 、 取模运算)的运算符是%
,模除在编程中有广泛的应用,比如奇偶数的判断。
In [81]: 19 // 3 # 求商数
Out[81]: 6
In [82]: 19 % 3 # 模除
Out[82]: 1
In [83]: 6 * 3 + 1 # 商数 × 除数 + 余数
Out[83]: 19
还有 Python 中计算乘方的运算符是:**
In [84]: 8 ** 2
Out[84]: 64
In [85]: 8 ** 3
Out[85]: 512
字符串: str
在我们人类的语言中,数值对应着计算,文字对应着记录。在 Python 语言中字符串也是用来记录的,它由一串字符(包括 ASCII、中文字符等)组成。
字符串的写法有多种形式:
- 单引号:
'单引号引起来的可以内嵌" 双引号 "的字符串'
- 双引号:
"双引号引起来的可以内嵌' 单引号 '的字符串"
- 三引号:
'''连续的三个单引号引起来的''',"""连续三个双引号引起来的"""
特别的是,三引号字符串可以分成多行来写,多行之间的空白(包括换行符、空格、Tab 键)都是字符串的一部分。
同时可以使用反斜杠 \
进行字符转义:
In [86]: '认真学 python'
Out[86]: '认真学 python'
In [87]: '认真 \' 学 \'Python'
Out[87]: "认真' 学 'Python"
In [88]: "认真' 学 'Python"
Out[88]: "认真' 学 'Python"
In [89]: "认真 \" 学 \"Python"
Out[89]: '认真" 学 "Python'
In [90]: '''hi!
...: hello'''Out[90]:'hi!\nhello'
反斜杠 \
会把它后面的字符转义出特殊字符,比如 \n
就转义为换行符。如果想取消这种转义,可以使用 原始字符串 的方式,即在字符串前面加 r
即可:
In [91]: print('C:\good\named-files') # 该字符串中 \n 是一个字符,表示换行符
C:\good
amed-files
In [92]: print(r'C:\good\named-files') # 该字符串中 \n 是原始的两个字符:`\` 和 `n`,因为前面加了 r。C:\good\named-files
空值:None
Python 定义了一个特殊的 None
来表示空值,它不同于False
,0
,但它的逻辑值为假。可以看以下代码加深理解:
In [93]: None + 1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-93-3fd8740bf8ab> in <module>
----> 1 None + 1
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
In [94]: None == False
Out[94]: False
In [95]: None == 0
Out[95]: False
In [96]: type(None)
Out[96]: NoneType
In [97]: type(0)
Out[97]: int
In [98]: type(False)
Out[98]: bool
In [99]: if None:
...: print('i am True')
...: else:
...: print('i am False')
...:
i am False
如果你定义的函数没有返回值,Python 会自动返回None
。
总结
这一节我们学到了 Python 可以当做计算机来进行整数、浮点数这些基本类型的加减乘除、求商、其余等运算,还有字符串的表示。