【Python】 第二章学习心得

《聪明办法学 Python(第2版)》第二章学习心得:数据类型和操作

通过学习第二章“数据类型和操作”,我对 Python 中的基本数据类型、内置常量、运算符、以及表达式求值有了更深入的理解。这一章不仅强化了我对数据本质的认知,也让我意识到在编程时,数据类型和运算符的选择会直接影响程序的行为和逻辑表达。以下是我的学习体会和重点整理:

常见内置数据类型

Python 提供了丰富的内置数据类型,常见的包括:

  • 整数(int)
  • 浮点数(float)
  • 布尔值(bool)
  • 字符串(str)
  • 列表(list)
  • 元组(tuple)
  • 集合(set)
  • 字典(dict)
  • 复数(complex)
  • 函数(function)
  • 模块(module)
  • 类型本身(type)

示例:

1
2
3
4
5
print(type(2))           # <class 'int'>
print(type(2.2)) # <class 'float'>
print(type(2 < 2.2)) # <class 'bool'>
print(type("hello")) # <class 'str'>
print(type([1, 2, 3])) # <class 'list'>

特别有趣的是,Python 中“类型”本身也是一种类型,即 type,这反映了 Python 强大的面向对象设计理念。

内置常量

Python 中常见的内置常量有:

  • TrueFalse:布尔类型常量
  • None:表示空值
  • 数学常量(通过 math 模块):
    • math.pi:π ≈ 3.14159
    • math.e:自然对数底 ≈ 2.71828
    • math.tau:τ ≈ 6.28318
    • math.inf:正无穷大

这些常数在数学运算和逻辑判断中非常常用,也大大提升了表达力。

算术运算符和整除

Python 支持多种运算符,包括:

  • 算术运算:+ - * / // % **
  • 比较运算:< <= == != >= >
  • 赋值运算:+= -= *= //= %= **=
  • 逻辑运算:and or not

特别需要注意:

  • / 表示浮点除法,结果为浮点数
  • // 表示整除,会舍弃小数部分
  • % 表示取余

示例:

1
2
3
4
print(5 / 3)   # 1.666...
print(5 // 3) # 1
print(-4 // 3) # -2
print(5 % 3) # 2

还学习了自定义的模运算实现方式:

1
2
def mod(a, b):
return a - (a // b) * b

运算符优先级与结合律

本章强调了表达式中不同运算符的优先级,例如:

1
2
print(2 + 3 * 4)    # 14,而不是 20
print(4 ** 3 ** 2) # 262144,而不是 4096

此外,Python 中运算符具有结合律(如从左到右或从右到左),这些都对表达式求值结果有重要影响。

类型影响运算语义

相同的运算符在不同类型之间的运算行为可能不同:

1
2
3
print(3 * 2)         # 6(数值乘法)
print(3 * "abc") # abcabcabc(字符串重复)
print("Hi" + "You") # HiYou(字符串拼接)

浮点数误差

本章还介绍了浮点数的误差问题,这是由底层二进制表示方式决定的:

1
2
print(0.1 + 0.1 + 0.1 == 0.3)  # False
print((0.1 + 0.1 + 0.1) - 0.3) # 5.551115123125783e-17(非常小的误差)

短路求值

逻辑运算中会触发“短路求值”机制:

1
2
3
4
5
6
def yes(): return True
def no(): return False
def crash(): return 1 / 0

print(no() and crash()) # 不会报错,因为 no() 为 False
print(yes() or crash()) # 不会报错,因为 yes() 为 True

这对于控制逻辑流程、避免错误非常有帮助。

type() vs isinstance()

type() 用于判断数据类型,但更推荐使用 isinstance() 来判断一个对象是否属于某个类或其子类:

1
2
3
4
5
6
7
8
9
import numbers

def isNumber(x):
return isinstance(x, numbers.Number)

print(isNumber(1)) # True
print(isNumber(1.1)) # True
print(isNumber(1+2j)) # True
print(isNumber("text")) # False

总结

通过本章学习,我掌握了 Python 常见的数据类型与内置运算符,理解了它们的行为及差异。在今后的编程中,我将更加注意:

  • 使用正确的类型与运算符组合
  • 利用 isinstance() 实现更健壮的类型判断
  • 理解表达式求值的过程与短路机制
  • 留意浮点数计算的精度问题

这为我编写更高效、可靠的 Python 程序奠定了坚实的基础。