python复制a = 10
b = 3
print(a + b) # 输出: 13
这种直接打印表达式结果的模式,在快速调试阶段特别高效。我在处理大规模数据集时经常用它来验证中间计算结果,比如检查某个过滤条件后的记录数。但要注意几个实际使用中的细节:
print(x[0].strip().lower())),调试时难以直观判断是哪部分出错经验:在临时调试场景下,可以配合
locals()函数快速查看所有变量值:print(locals())['a'],但正式代码中不建议保留。
现代Python项目更推荐使用f-string(Python 3.6+),它的优势不仅在于可读性:
python复制print(f"{a} + {b} = {a + b}") # 输出: 10 + 3 = 13
在真实项目中,我会这样扩展其应用:
类型标注:f"{value=}"语法(Python 3.8+)自动包含变量名
python复制print(f"{a=}, {b=}") # 输出: a=10, b=3
格式控制:
python复制print(f"结果: {a/b:.2%}") # 输出: 结果: 333.33%
多行复杂输出:
python复制print(f"""
运算报告:
- 操作数: {a}, {b}
- 加法结果: {a + b}
- 除法结果: {a / b:.2f}
""")
在需要高频打印的场景(如日志系统),不同方式有显著性能差异:
| 方式 | 执行100万次耗时(秒) | 内存占用(MB) |
|---|---|---|
| 传统print | 1.82 | 2.1 |
| %格式化 | 2.15 | 2.3 |
| str.format() | 2.98 | 2.5 |
| f-string | 1.91 | 2.1 |
实际选择策略:
欧几里得算法定义:对于整数a和正整数b,存在唯一q和r满足:
code复制a = b × q + r (其中 0 ≤ r < b)
Python的实现特点:
python复制-7 // 3 # 结果: -3
-7 % 3 # 结果: 2
验证数学等式:
code复制-7 = 3 × (-3) + 2 # 满足 0 ≤ 2 < 3
与其他语言的对比:
| 语言 | -7 // 3 | -7 % 3 | 处理方式 |
|---|---|---|---|
| Python | -3 | 2 | 向下取整 |
| Java | -2 | -1 | 向零取整 |
| C | -2 | -1 | 实现依赖 |
python复制total_seconds = 3661
hours = total_seconds // 3600
remaining = total_seconds % 3600
print(f"{hours}h {remaining//60}m {remaining%60}s") # 1h 1m 1s
python复制buffer_size = 10
index = 8
next_index = (index + 1) % buffer_size # 结果: 9
next_next = (index + 2) % buffer_size # 结果: 0
python复制def chunk_data(data, size):
return [data[i:i+size] for i in range(0, len(data), size)]
# 等价于显式使用整除:
chunks = []
for i in range((len(data) + size - 1) // size):
chunks.append(data[i*size : (i+1)*size])
Python的整除运算(//)实际上是floor division:
python复制import math
math.floor(-7 / 3) # -2.333... → -3
取模运算保证结果符号与除数一致:
python复制-7 % 3 # 2 (与除数3同号)
7 % -3 # -2 (与除数-3同号)
这种设计在循环处理中特别有用:
python复制# 无论start是正是负,都能正确遍历
for i in range(start, end, step):
index = i % capacity
当除数是2的幂次时,可用位运算加速:
python复制n = 64
# 传统方式
n // 2 == n >> 1
n % 8 == n & 0b0111
# 性能对比
%timeit 1000000 // 2 # 48.7 ns
%timeit 1000000 >> 1 # 23.4 ns
注意:现代Python解释器会自动优化这种场景,显式使用位运算主要出现在底层代码中
在密集计算场景,可以预计算模的倒数:
python复制def fast_mod(n, d):
return n - d * (n // d)
# 使用示例
fast_mod(17, 5) # 2
有时需要不同的取模方式,比如始终返回正数:
python复制def positive_mod(a, b):
return (a % b + b) % b
positive_mod(-7, 3) # 2
positive_mod(7, -3) # 1
python复制# 看似相同的数
a = 0.1 + 0.2 # 0.30000000000000004
b = 0.3 # 0.3
# 错误比较方式
print(a % 0.1 == b % 0.1) # False
# 正确做法
import math
math.isclose(a % 0.1, b % 0.1) # True
处理用户输入时总要验证除数:
python复制def safe_divide(a, b):
try:
return a // b, a % b
except ZeroDivisionError:
# 根据业务需求处理
return (0, 0) if a == 0 else (None, None)
Python虽然支持大整数,但要注意:
python复制# 超大数运算
(10**100 + 1) % 3 # 结果: 2(计算耗时明显增加)
# 使用蒙哥马利模乘等算法优化
from gmpy2 import mpz
mpz(10)**100 % 3 # 更高效
在实际项目中,我习惯将核心运算封装成工具函数:
python复制def divmod_extended(a, b):
"""增强版divmod,处理各种边界情况"""
if b == 0:
raise ValueError("除数不能为零")
q, r = divmod(a, b)
return {
'quotient': q,
'remainder': r,
'equation': f"{a} = {b}×{q} + {r}",
'is_exact': r == 0
}
这种设计在金融计算等对精度要求高的场景特别有用,既能清晰展示计算过程,又便于后续审计。