这篇笔记我们介绍Python中的变量概念和基本数据类型。
高级编程语言中,变量是指向一个存储数据的内存区域的标识,Python中我们可以用如下方式定义变量。
i = 1
size = 3.14
name = 'apple'
Python的变量类型是自动推导的,我们无需指明,不过我们也可以主动使用类型标记来增强代码的可读性。
类型标记是Python3.6引入的新特性。类型标记用于帮助静态类型检查器提前发现代码中可能的错误,它在解释器运行阶段不起作用。如果变量使用了类型标记,那么这个变量就只能绑定标记规定的类型。
i: int = 1
size: float = 3.14
name: str = 'apple'
类型标记也可以制定多种数据类型,下面例子中size
可以是浮点数或None
。
size: float | None = None
注意:类型标记不是必须的,Python解释器也不会因为类型标记错误而拒绝执行代码!实际开发中,对于简单的可一眼看出类型的变量声明我们可以不加类型标记,但函数签名等关键位置则强烈推荐添加类型标记!
大多数编程语言都有常量(不可改变的量)概念,但Python中没有真正的“常量”,但我们可以用Upper Snake Case命名约定某个标识是常量。
MAX_POOL_SIZE = 3
PI = 3.14
掌握一门编程语言最重要的是先了解它的数据类型,这样我们才能定义变量并用这门语言进行运算,下面介绍Python的数据类型。
Python的整数类型类似C中的int
类型,可以直接用1
、100
等字面量表示。对于十六进制字面量可以用0x
前缀表示,二进制则可以使用0b
,八进制则使用0o
。
a: int = 1
b: int = 0xff
c: int = 0b1010
d: int = 0o123
Python默认支持大数运算,也就是说Python的整数没有范围,当整数值超过C能表示的最大int
时,会自动使用大数运算的算法,浮点数也是如此。
Python支持双精度浮点数(即64位浮点数),支持约15-17位十进制小数位。Python语言中没有单精度浮点数的概念,现代CPU计算单精度浮点数和双精度浮点数的速度没有区别,且双精度浮点数精度更高,一般来说我们都是使用双精度浮点数,Python也仅提供了这一种浮点类型。
a: float = 3.14
不过要注意的是虽然Python语言本体仅支持双精度浮点数,但一些科学计算库支持更多的自定义数据类型,例如底层由C实现的Numpy就支持半精度浮点数float16
、单精度浮点数float32
、双精度浮点数float64
、扩展精度浮点数float128
、bfloat16
等,这些库底层可能使用SIMD指令集甚至GPU等专用硬件,因此并不能一概而论。
另外要注意的是,和大部分其他编程语言一样,使用浮点数要注意精度丢失问题,例如计算0.1 + 0.1 + 0.1 - 0.3
得到的结果可能是5.551115123125783e-17
,这是因为内存中浮点数是以二进制形式存储数据的,对于某些浮点数存储时就不会是我们定义的精确值。如果用这种结果进行if
相等判断结果可能就错了。
布尔值有两个,分别是True
和False
,布尔值只能用布尔运算符and
、or
和not
。
result: bool = True
None表示空值,类似于其他语言的null
,Python中None也是一种类型。判断一个变量是否是空值需要使用is
运算符,例如if foo is None
。
size: float | None = None