内置类型¶
数字类型¶
官方文档
关于数字类型的完整用法,见 Python 标准库 » 内置类型 » 数字类型。
关于数字类型的实现细节,见 Python 语言参考手册 » 3. 数据模型 » 3.2.4. numbers.Number。
- 整数 (
int) -
在 Python 中,整数可表示任意大小的数字,仅受限于可用的内存 (包括虚拟内存)。这是因为 Python 的整数是对象 (object),而不是原生的机器级整型。当整数的值超出机器级整型的取值范围时,Python 会自动采用
long类型来存储。a = 1234567890123456789012345678901234567890 print(a > 1e39) # True a *= a print(a) # 1524157875323883675049535156256668194500533455762536198787501905199875019052100 - 浮点型 (
float) -
在 Python 中,浮点型表示机器级的双精度浮点数。其所接受的取值范围和溢出处理将受制于底层的机器架构 (以及 C 或 Java 实现)。Python 不支持单精度浮点数;支持后者通常的理由是节省处理器和内存消耗,但这点节省相对于在 Python 中使用对象的开销来说太过微不足道,因此没有理由包含两种浮点数而令该语言变得复杂。
小测:数值计算
黄金比例 \(\phi = \frac{1 + \sqrt{5}}{2}\)。请计算 \(\phi\) 的值。
import math
phi = ...
print(phi) # 1.618033988749895
提示:使用 math.sqrt() 来计算平方根。
小测:浮点数比较
请在误差阈值 \(\epsilon = 1 \times 10^{-6}\) 内判断 a 和 b 是否相等。
eps = 1e-6
a = 0.1 + 0.2
b = 0.3
print(...) # True
提示:使用 abs() 来计算绝对值。
注:math.isclose() 是 Python 3.5 引入的新函数,用于比较浮点数是否相等。它更加灵活,可以指定绝对误差和相对误差。
字符串 (str)¶
字符串是不可变的序列。字符串是 Unicode 字符的序列,而不是字节 (bytes,仅支持 0~255 的 ASCII 码) 的序列。
s = 'Hello, world! 你好,世界!'
print(s[0]) # 'H'
print(s[-2]) # '界'
s[0] = 'h' # TypeError: 'str' object does not support item assignment
在 Python 中,字符串格式化有多种方式。最简单的方式是使用 % 运算符。但是,更推荐使用更现代的 f-string。
小测:字符串格式化
准确率 acc 为 0.952357。请使用 f-string 或其他方式格式化输出 acc 的值,以百分比形式表示,保留 2 位小数。
acc = 0.952357
print(...) # 95.24%
提示:使用 f-string 时,可以在大括号中使用 :.nf 来指定 \(n\) 位小数。
列表 (list)¶
Python 中的简单赋值永远不会复制数据。当你将一个列表赋值给一个变量时,该变量引用现有列表。通过一个变量对列表所做的任何更改都将通过所有引用它的其他变量看到。
rgb = ["Red", "Green", "Blue"]
rgba = rgb
id(rgb) == id(rgba) # True: 它们引用同一个对象
rgba.append("Alph")
print(rgb) # ["Red", "Green", "Blue", "Alph"]
小测:翻转列表
请使用列表的切片操作翻转列表 acc_history。
acc_history = [63, 81, 89, 93, 95]
acc_history = ...
print(acc_history) # [95, 93, 89, 81, 63]
提示:切片操作的语法是 a[start:stop:step],其中 start 为起始索引,stop 为结束索引,step 为步长。默认值分别为 0、len(a) 和 1。
元组 (tuple)¶
小测:多重赋值
a, (b, c), d = 1, (2, 3), (4, 5, 6)
请问 a、b、c 和 d 的值分别是多少?
字典 (dict)¶
小测:字典
现有 3 个目标检测模型在 4 个类别上的 mAP 值,如下所示。请打印 Model1 在 person 类别上的 mAP 值,若不存在则返回 0。
model_mAPs = {
'Model1': {'person': 0.75, 'car': 0.82, 'dog': 0.68, 'cat': 0.73},
'Model2': {'person': 0.80, 'car': 0.78, 'dog': 0.70},
'Model3': {'person': 0.70, 'car': 0.85, 'dog': 0.65, 'cat': 0.72}
}
提示:字典的取值操作是 d[key],若 key 不存在则会抛出 KeyError 异常。可以使用 d.get(key, default) 来避免异常。