学径 LearnPath

编程语言基础 / Wiki

数据类型

值属于哪一种——整数、浮点数、文字还是真假——并因此能参与哪些运算。

它是什么

数据类型 说明一个值「是哪种东西」。整数用来计数,浮点数带小数,字符串是文字,布尔值只有真和假。类型决定了能做哪些运算:两个整数可以相加,整数不能和一份 列表 直接做除法。看起来长得像,并不等于可以按同一种规则参与计算。

python
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版)》

未登录时不会保存学习进度