deffibonacci(n): if n in cache: return cache[n] if n <= 2: return1 result = fibonacci(n - 1) + fibonacci(n - 2) cache[n] = result return result
2.2.2 使用生成器
使用生成器而不是列表可以极大地减少内存开销。
1 2 3 4 5 6 7
# 示例:生成器的使用 defgenerate_numbers(n): for i inrange(n): yield i * i
for num in generate_numbers(10): print(num)
2.3 使用性能分析工具
对代码进行分析可以帮助我们发现性能瓶颈。以下是几个常用的性能分析工具:
cProfile:Python自带的性能分析工具。
line_profiler:逐行分析代码性能。
2.3.1 使用cProfile
1 2 3 4 5 6 7 8 9 10
import cProfile
defslow_function(): total = 0 for i inrange(10000): total += i * i return total
if __name__ == '__main__': cProfile.run('slow_function()')
2.4 代码重构
在代码优化的过程中,重构是一种常用的方法。它可以提高代码的可读性和可维护性。
2.4.1 识别代码异味
在重构之前,首先要识别代码中的异味,包括:
重复代码
难以理解的命名
过长的函数
2.4.2 应用重构原则
一些常用的重构原则:
单一职责原则(SRP):一个模块只应负责一项任务。
开闭原则(OCP):模块应对扩展开放,对修改关闭。
2.5 实战案例
让我们结合测试和优化,通过一个简单的项目来示范如何高效地测试和优化代码。
2.5.1 项目需求
假设我们要实现一个简单的计算器支持加、减、乘、除功能。
2.5.2 最初版本
1 2 3 4 5 6 7 8 9 10 11
defcalculator(operation, a, b): if operation == 'add': return a + b elif operation == 'subtract': return a - b elif operation == 'multiply': return a * b elif operation == 'divide': return a / b if b != 0else'Error: Division by zero' else: return'Error: Unknown operation'
def calculator(operation, a, b):
operations = {
'add': lambda x, y: x + y,
'subtract': lambda x, y: x - y,
'multiply': lambda x, y: x * y,
'divide': lambda x, y: x / y if y != 0 else 'Error: Division by zero