Skip to content

变量、数据类型与运算 ​

学习目标 ​

  • 理解名字绑定、可变性和类型转换。
  • 掌握数字、布尔、空值、比较、逻辑和位运算。
  • 能选择安全的格式化和舍入方式。

核心知识点 ​

Python 的变量没有预先声明的固定类型;赋值是让名字指向对象。int、float、complex 是数字类型,bool 是 int 的子类,None 表示缺少值。强类型意味着字符串不会自动当数字相加。

常用用法 ​

赋值与多重赋值 ​

python
name = "Ada"
age, language = 36, "Python"
first, *middle, last = [1, 2, 3, 4]
print(name, age, language, middle)
# 输出:Ada 36 Python [2, 3]

解包要求元素数量匹配;带星号的名字会接收一个列表。

type() 与 isinstance() ​

python
value = 42
print(type(value).__name__, isinstance(value, int))
# 输出:int True

type(x) is T 只匹配精确类型;isinstance 会考虑继承关系,业务判断通常优先用后者。

数值运算 ​

python
a, b = 17, 5
result = (a + b, a - b, a * b, a / b, a // b, a % b, a ** 2)
print(result)
# 输出:(22, 12, 85, 3.4, 3, 2, 289)

/ 总是产生浮点数,// 是向下取整而不是简单截断。

显式类型转换 ​

python
text = "3.14"
number = float(text)
count = int("12")
print(number, count, str(count))
# 输出:3.14 12 12

转换失败会抛出 ValueError;对外部输入应先校验或捕获异常。

比较与逻辑运算 ​

python
score = 86
passed = 60 <= score < 100
label = "通过" if passed else "不通过"
print(passed, label, not False, True and "yes")
# 输出:True 通过 True yes

链式比较按数学直觉连接;and、or 返回操作数,不一定返回布尔值。

数字格式化 ​

python
price = 12.5
ratio = 0.875
print(f"价格:{price:.2f},比例:{ratio:.1%}")
# 输出:价格:12.50,比例:87.5%

f-string 适合展示,金额计算不要依赖二进制浮点的精确相等。

不常用但需要知道 ​

decimal.Decimal ​

python
from decimal import Decimal

total = Decimal("0.10") + Decimal("0.20")
print(total)
# 输出:0.30

财务计算从字符串构造 Decimal,不要先经过 float。

fractions.Fraction ​

python
from fractions import Fraction

value = Fraction(1, 3) + Fraction(1, 6)
print(value)
# 输出:1/2

分数适合需要精确有理数的算法,代价是运算速度和表示范围。

位运算 ​

python
mask = 0b0101
flag = 0b0011
print(mask & flag, mask | flag, mask ^ flag, mask << 1)
# 输出:1 7 6 10

位运算常用于标志位和底层协议,普通业务条件优先使用具名布尔值。

易混点 ​

  • None 应使用 is None,不要用 == None。
  • bool 是 int 的子类,True + True 的结果是 2,但不要用它表达计数语义之外的东西。
  • round(2.5) 遵循“银行家舍入”,不要当作总是远离零的四舍五入。
  • /、// 和 % 对负数的行为要用示例验证。
  • is 比较对象身份,== 比较值。

课后小问 ​

  1. 17 // 5 和 17 / 5 的结果有什么区别? 答案:前者是 3,后者是 3.4。 解析:// 返回不大于商的最大整数(对负数仍向下),/ 返回浮点商。

  2. 为什么推荐 Decimal("0.10") 而不是 Decimal(0.10)? 答案:后者会把浮点数已经产生的二进制近似带入 Decimal。 解析:字符串能准确表达十进制金额,构造时不会丢失精度。

本节小结 ​

掌握绑定、类型检查、显式转换、运算符和格式化后,就能读懂大多数基础表达式;精度敏感场景再选择 Decimal 或 Fraction。

快速回顾 ​

  • 检查类型:type、isinstance
  • 空值判断:is None
  • 商与余数:/、//、%
  • 条件表达式:a if condition else b
  • 精确数值:Decimal、Fraction