调试和性能分析
''
调试和性能分析
用pdb进行代码调试
首先 我们来看代码的调试 也许不少人会有疑问 说白了不就是程序中使用
print()语句吗?
没错 在程序中相应的地方打印的确是调试程序的一个常用手段,但这只适用于小型程序 因为你每次都得重新运行整个程序
或者是一个完整的功能模块 才能看到打印出来的变量值 如果程序不大 每次运行都非常快 那么使用print()的确是很方便
可能又有人会说 现在很多的IDE不都有内置的debug工具?
如何使用pdb
首先 要启动pdb调试 我们只需在程序中加入import pdb 和 pdb.set_trace()这两行代码就行了
'''
import pdb
a = 1
b = 2
# def func():
# print('enter func()')
# pdb.set_trace()
# c = 3
# func()
# print(a + b + c)
# 命令's' 就是step into的意思 即进入相对应的代码内部
# s, n,l除了这些常用命令 还有许多其他命令可使用
# 用cProfile进行性能分析
'''
关于调试的内容 主要讲这些 事实上 除了要对程序进行调试 性能分析也是每个开发者的必备技能
日常工作中 我们常常会遇到这样的问题 在线上 我发现产品的某个功能模块效率低下 延迟高 占用的
资源多 但却不知道是哪里出了问题
这时对代码进行profile就显得异常重要了
这里所谓的profile 是指对代码的每个部分进行动态的分析 比如准确计算出每个模块消耗的时间等
计算裴波拉契数列 运用递归思想
'''
import cProfile
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
def fib_seq(n):
res = []
if n > 0:
res.extend(fib_seq(n-1))
res.append(fib(n))
return res
# print(fib_seq(30)) # 运行结果 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040]
cProfile.run('fib_seq(30)')
# 测试一下这段代码总的效率以及各个部分的效率
以上代码可以看到fib()函数被调用了七百多次,用时最多,
导入import cProfile 运用cProfile.run()分析性能