4.代码调试和性能分析

一.代码调试

1.print()函数调试

2.用pdb进行代码调试

pdb是Python自带的代码调试库,直接输入 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)

当运行后,首先出现:
在这里插入图片描述
键入n(next)执行下一步代码:
在这里插入图片描述
键入l,查看上下文代码信息:
在这里插入图片描述

键入q(quit)退出调试:
在这里插入图片描述

更多用法请参看Python官方文档pdb

二.性能分析

日常工作中,我们常常会遇到这样的问题:在线上,发现产品的某个功能模块效率低下,延迟高,占用的资源多,但却不知道是哪里出了问题。

这时,对代码进行 profile 就显得异常重要了。

这里所谓的 profile,是指对代码的每个部分进行动态的分析,比如准确计算出每个模块消耗的时间等。

计算斐波拉契数列,运用递归思想(用cProfile进行性能分析):

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

fib_seq(30)

cProfile.run('fib_seq(30)')

结果如下:
在这里插入图片描述
ncalls,是指相应代码 / 函数被调用的次数

tottime,是指对应代码 / 函数总共执行所需要的时间(注意,并不包括它调用的其他代码 / 函数的执行时间)

tottime percall,就是上述两者相除的结果,也就是tottime / ncalls

cumtime,则是指对应代码 / 函数总共执行所需要的时间,这里包括了它调用的其他代码 / 函数的执行时间

cumtime percall,则是 cumtime 和 ncalls 相除的平均结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值