发布于2019-08-29 14:30 阅读(1139) 评论(0) 点赞(18) 收藏(3)
有些同学在阅读他人所写的代码(比如github)时,往往会对他人定义的参数感到疑惑。因为光从参数的名字不能推断这些参数里究竟保存的是什么样的变量。不少同学只能一遍又一遍的用print来查看参数中保存的变量。遇到不熟悉的类时更是无从下手。
今天介绍一个Python的调试工具,叫做ipdb。有了这个再复杂的项目也能如抽丝剥茧般一点点揭开她的面纱。
安装ipdb最简单的方法就是
pip install ipdb
调用ipdb
python -m ipdb script.py
首先说明一下ipdb都有哪些功能。
不仅如此,你还可以直接定义参数和函数、导入模块并且调用他们。
我从github中节选了一段代码github.com/openai/gym/…,假设左边的数字代表了代码在源文件中所处的行数。
77 n_elite = int(np.round(batch_size*elite_frac))
78 th_std = np.ones_like(th_mean) * initial_std
79
80 for _ in range(n_iter):
81 ths = np.array([th_mean + dth for dth in th_std[None,:]*np.random.randn(batch_size, th_mean.size)])
82 ys = np.array([f(th) for th in ths])
83 elite_inds = ys.argsort()[::-1][:n_elite]
84 elite_ths = ths[elite_inds]
85 th_mean = elite_ths.mean(axis=0)
86 th_std = elite_ths.std(axis=0)
87 yield {'ys' : ys, 'theta_mean' : th_mean, 'y_mean' : ys.mean()}
连续按n直到第77行执行完毕
p n_elite
或者
b 78 # 在第78行设置断点
c # 正常执行代码,在断点处停止
p n_elite # 查看n_elite的值
pdoc np # 显示np的说明文档,python自带的模块大多有文档。自制模块不一定有
pinfo np # String form后面写的地址就是
int(np.round(255*elite_frac))
b 83 # 在第83行设置断点
p ths
cl bpnumber # bpnumber是断点的序号
source f # 查看f的源代码
dir(elite_ths)
import pandas as pd
ths_df = pd.DataFrame(ths)
j 77 # 跳到第77行,不过要注意跳转途中的代码不会被执行,所以有可能出现某参数没被定义的情况
s # 进入到下一步
u # 回到上一层堆栈帧
p n_elite
r # 执行当前函数,返回值
l或者ll
h 某个命令
run
下一期将会用ipdb解析github上某个项目。
作者:comeonbady
链接:https://www.pythonheidong.com/blog/article/68473/5f160af41b91703d3c0a/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!