社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何读懂python写的开源项目?你需要一个ipdb调试器(入门篇)

一个普普通通简简单单平平凡凡的神 • 8 年前 • 552 次点击  

有些同学在阅读他人所写的代码(比如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()}

1. 我想知道n_elite为何变量(方框内为直接在命令提示符中输入的内容)

连续按n直到第77行执行完毕
p n_elite

或者

b 78 # 在第78行设置断点
c # 正常执行代码,在断点处停止
p n_elite # 查看n_elite的值

2. 我想知道np是干什么的

pdoc np # 显示np的说明文档,python自带的模块大多有文档。自制模块不一定有

3. 我想知道np的源代码在哪

pinfo np # String form后面写的地址就是

4. 我想知道如果把batch_size的值换成其他值的计算结果

int(np.round(255*elite_frac))

5. 我想知道ths每一次的迭代后的变化

b 83 # 在第83行设置断点
p ths

6. 每次迭代都要停顿,我想删除这个断点

cl bpnumber # bpnumber是断点的序号

7. 我想知道f是什么函数

source f # 查看f的源代码

8. 我想知道elite_ths除了mean和std以外还有哪些可以调用的函数

dir(elite_ths)

9. 我想用pandas来编辑ths

import pandas as pd
ths_df = pd.DataFrame(ths)

10. 我想进入ones_like调试

j 77 # 跳到第77行,不过要注意跳转途中的代码不会被执行,所以有可能出现某参数没被定义的情况
s # 进入到下一步

11. 我当前在ones_like进行调试,我怎么调试n_elite

u # 回到上一层堆栈帧
p n_elite

12. 我当前在ones_like,我想结束调试返回上一层

r # 执行当前函数,返回值

13. 我想查看周围的代码

l或者ll

14. 我忘了怎么使用某个命令

h 某个命令

15. 我想重新调试但不想删除断点

run

下一期将会用ipdb解析github上某个项目。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/apS4Y8KtEq
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/12448