数据类型
值属于哪一种——整数、浮点数、文字还是真假——并因此能参与哪些运算。
它是什么
数据类型 说明一个值「是哪种东西」。整数用来计数,浮点数带小数,字符串是文字,布尔值只有真和假。类型决定了能做哪些运算:两个整数可以相加,整数不能和一份 列表 直接做除法。看起来长得像,并不等于可以按同一种规则参与计算。
n = 3 # int,整数
x = 3.14 # float,浮点数
s = "观测" # str,字符串
ok = True # bool,布尔类型搞错,等于把世界认错。对话式编程时,若把编号、读数和标签混成一类对象,生成出的程序可以「能跑」,却在加总一个不该加总的量。见 对话式编程。
名字从哪来
type 的本义是「种类」。计算机早期内存昂贵,必须事先声明格子里装的是整数还是文字,机器才知道占多少空间、按什么规则运算。Python 不要求事先申报,但每个值仍然带着自己的类型,可以用 type(...) 查出来。
整数 int 来自 integer;浮点 float 来自 floating point,小数点可以在表示中「浮动」;字符串 str 来自 string,像把字符穿成一串;布尔 bool 纪念逻辑学家乔治·布尔(George Boole)。容器类型——列表、元组、字典、集合——则是「装着别的值」的类型,和单个数不在同一层。
它怎么工作
运算前,解释器先看类型。2 + 3 得到整数 5;"2" + "3" 得到字符串 "23",这叫拼接,不是加法。要把文字变成可以计算的数,需要转换,例如 int("3")。转换失败会引发 异常,因为并不是每一段文字都对应一种合法的数字写法。
同一份 变量 可以先后指向不同类型的值。名字本身不固定类型,类型跟的是值。3 和 "3" 经 print 显示出来都像三,但一个能参与算术,一个是字符:显示长得像,并不等于类型相同。
生活里在哪里
表格的一列有的填人数,有的填姓名,不能混着求平均;厨房量杯以毫升计可以是小数,鸡蛋以个数计应是整数;电路的通断只有两种稳态,接近布尔值。科学记录里更常见的陷阱是:仪器导出的「数字」其实是字符串,统计软件若未转换,就会把拼接当成求和。类型在生活里往往隐而不宣,直到一次错误的运算把它揭开。
和相近概念的差别
类型描述值。变量 只是指向值的名字。运算符 的含义随类型而变:加号对数字是加法,对字符串是拼接。
input 从键盘收进来的永远是字符串,即使使用者打的是数字的字形。不转换就做算术,得到的是另一种完全合法、却不是问题所要的运算。
常见误会
误会 1:看起来像数字,就可以拿来算。
字形是给人看的。参与算术之前,值必须属于相应的类型。
误会 2:整数除法一定还是整数。
在现代 Python 里,5 / 2 得到 2.5。若只要整商,用 //。见 运算符。
误会 3:True 和 "True" 一样。
前者是布尔值,后者是四个字符。判断条件时,非空字符串往往被当成「真」,其含义与布尔值并不相同。
想知道更多
- 书:查尔斯·佩措尔德《编码:隐匿在计算机软硬件背后的语言》
- 书:布鲁克希尔《计算机科学概论》
- 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
- 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
未登录时不会保存学习进度