python中返回上一步操作的代码_如何读懂python写的开源项目?你需要一个ipdb调试器(入门篇)...

有些同学在阅读他人所写的代码(比如github)时,往往会对他人定义的参数感到疑惑。因为光从参数的名字不能推断这些参数里究竟保存的是什么样的变量。不少同学只能一遍又一遍的用print来查看参数中保存的变量。遇到不熟悉的类时更是无从下手。

今天介绍一个Python的调试工具,叫做ipdb。有了这个工具我们就能轻易地进行各种调试了。

安装ipdb最简单的方法就是

pip install ipdb

调用ipdb

python -m ipdb script.py

首先说明一下ipdb都有哪些功能。

不仅如此,你还可以直接定义参数和函数、导入模块并且调用他们。

基本操作

我从github中节选了一段代码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 # File后面写的路径就是

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

int(np.round(255*elite_frac)) # 直接换了数字执行计算

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

b 83 # 在第83行设置断点

p ths

6. 我想知道程序进程经过断点100次以后的结果

ignore bpnumber 100 # bpnumber是断点的序号

c

p ths

7. 我不需要这个断点了,我想删除它

cl bpnumber # bpnumber是断点的序号

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

source f # 查看f的源代码

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

pp vars(elite_ths)

pp dir(elite_ths)

10. 我想用pandas来编辑ths

import pandas as pd

ths_df = pd.DataFrame(ths)

11. 我想进入ones_like调试

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

s # 进入到下一步

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

u # 回到上一层堆栈帧

p n_elite

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

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

14. 我想查看周围的代码

l或者ll

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

h 某个命令

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

run

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值