ipython、jupyter 在代码执行前修改待执行的代码

ipython、jupyter 在代码执行前修改待执行的代码


假设有一个需求,需要把待执行代码中的所有 root 替换成 tom

代码

可以通过自定义 ipython 的 input transformation 来实现这个需求,官方文档 Custom input transformation — IPython 8.16.0 documentation

class CodeTransformer(object):
    def __init__(self, ip):
        self.shell = ip

    def replace(self, lines):
        new_lines = []
        # 按行操作
        for line in lines:
            # 将 root 替换成 tom
            new_lines.append(line.replace('root', 'tom'))
        return new_lines

# 加载 ipython 扩展
def load_ipython_extension(ip):
    ct = CodeTransformer(ip)
    ip.input_transformers_post.append(ct.replace)

上述代码是一个自定义的 CodeTransformerload_ipython_extension() 方法可以将其当做一个扩展加载进 ipython。

配置

我们需要在 ipython 的配置文件中添加配置,这次才能在 ipython 启动时自动加载我自定义的 CodeTransformer

ipython 默认配置文件在用户目录的 .python/profile_default 文件夹中,比如我的是 C:/Users/zhaobs/.ipython/profile_default/ipython_config.py。如果没有 ipython_config.py 文件,可以执行 ipython profile create 生成。

然后在配置文件中追加以下配置,我的自定义 CodeTransformerD:/custom_code_transformer.py 文件中,所以需要把 D:/ 添加到 python 的模块搜索路径中,custom_code_transformer 是模块名(py 文件的文件名前缀)

import sys
sys.path.append('D:/')
c.InteractiveShellApp.extensions.append('custom_code_transformer')

测试

从下图中可以看出,root 没替换成了 tom,而其他的没受影响

image-20231026175128630

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值