Menu

Python 数据类型:int、float、str、bool、list、dict 等

Python 内置数据类型一览:数字、字符串、布尔值、None、列表、元组、集合、字典,附示例,以及各自的适用场景。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

类型为什么重要

“类型”就是一个类别,它告诉 Python 一个值应该怎样表现。两个整数相加是做算术;两个字符串相加是把它们拼接起来;把字符串和整数相加则会报错。一个值的类型决定了对它进行哪些操作才有意义。

Python 的内置类型不多,而且很友好。其中四种,int、float、str、bool,你写的几乎每个程序都会用到。其余的类型会在你开始把数据组织成集合时出现。

数字:int 和 float

数字有两种,Python 根据你的写法决定给你哪一种:

没有小数点?得到的是 int。有小数点?得到的是 float。在算术运算中可以随意混用它们,任何涉及 float 的运算结果都是 float:

Python 中的整数可以大到你的内存所能容纳的程度:不会溢出,也没有固定的 32 位或 64 位上限。你可以计算 2 ** 1000,Python 会把每一位数字都给你算出来。

浮点数遵循通常的 IEEE 754 规则,这意味着会有几个经典的意外:

它打印的是 0.30000000000000004,而不是 0.3。这不是 Python 的 bug,所有语言中的二进制浮点数都是这样工作的。当你需要精确的小数时(比如处理金额),请改用 decimal 模块。其他情况下,在显示时四舍五入通常就够了。

字符串:str

字符串是字符的序列。用单引号或双引号把它括起来,Python 不在乎用哪种,只要开头和结尾的引号一致就行:

三引号字符串(""" ... """)可以跨越多行:

字符串有一大套 API,你会慢慢学会:切片、.upper()、.split()、.replace() 这样的方法,以及能写出 f"Hello, {name}" 的 f-string 格式化。下一页就专门讲字符串。

布尔值:bool

只有两个值,必须完全按照这样拼写:True 和 False,首字母大写。比较运算的结果是布尔值:

在底层,True 和 False 实际上就是 1 和 0,所以如果你需要统计有多少个条件为真,可以直接对布尔值求和:

None:没有值

None 是 Python 表示“没有值”的方式。没有显式返回任何东西的函数会返回 None。你也会把它用作占位符:

约定是用 is None 和 is not None 来判断,而不是 == None。is 检查的是同一性,这才是你在这里真正想表达的意思。

列表、元组、集合、字典

这是四种内置的集合类型。每一种都有专门的页面详细讲解,这里先简单介绍一下,让你能认出它们:

经验法则:

  • 列表:你预计会变化的序列。添加、删除、排序都没问题。
  • 元组:你想保护起来不被修改的序列。常用于形状固定的记录,比如 (x, y) 坐标。
  • 集合:一袋不重复的元素,适合出现重复就算 bug 的场景。
  • 字典:按键查找。也就是 JSON 那种结构。

类型之间的转换

当自动转换有风险时,Python 不会替你转换类型。把整数变成字符串,或者把字符串变成数字,都需要你主动要求:

如果某个转换没有意义,比如 int("hello"),Python 会抛出 ValueError,并告诉你传给它的是什么。报错,看明白,改好,继续。

检查类型

有两个工具值得了解:

type() 很适合在 REPL 里快速看一眼。在实际代码中用的是 isinstance(),因为它能很好地配合继承,还能同时检查多种类型。

一个快速的小练习

先原样运行下面的代码块,然后改几个值,看看类型会变成什么:

你现在还不需要理解 for,我们后面会讲到,但这能让你一眼就对这些内置类型有个整体印象。

选择适合数据的类型

你现在不需要记住每一种类型。但你确实需要在看到某种类型时能认出它,在创建数据时能选对类型。“它是固定的还是会变的?元素是否唯一?我是按键查找还是按位置查找?”九成的情况下,这几个问题就能帮你选出合适的集合类型。

下一篇:深入讲解字符串,因为它是你几乎每个程序都会接触到的数据类型。

常见问题

Python 主要有哪些数据类型?

数字(int 和 float)、字符串(str)、布尔值(bool)、None,以及四种集合类型:list、tuple、set 和 dict。你在 Python 代码中见到的其他一切,都是由这些类型加上少数几个其他类型(bytes、complex、frozenset)构建而成的。

在 Python 中怎么查看一个值的类型?

把它放进 type():type(42) 返回 <class 'int'>,type('hi') 返回 <class 'str'>。要做真假判断,就用 isinstance(value, int),它更灵活,因为它也能处理子类。

Python 是静态类型还是动态类型?

动态类型。一个变量可以指向任何类型的值,同一个变量在它的生命周期内也可以改变类型。这和 Java 或 C++ 这类语言不同,在那些语言中,你声明一次变量的类型,之后就不能再改。

Coddy 编程语言插图

和 Coddy 一起学编程

开始