首页 > 编程语言 >IPython刷新函数模块

IPython刷新函数模块

时间:2024-03-25 09:56:36浏览次数:33  
标签:autoreload func2 ipython test 模块 刷新 IPython

技术背景

IPython是一个非常灵活好用的python终端工具,而且比Python自带的终端工具还多了命令行高亮和自动索引的功能,也是常用的Jupyter Notebook的基础工具。在使用IPython的过程中可以使用它的一些独有的功能——直接运行Shell命令行,和魔术命令。本文介绍的是其中一种魔术命令——重新加载函数模块。

魔术命令配置

在默认配置下,IPython在运行一个模块之前不会去重载这个模块,因此你这个模块在运行程序的过程中怎么改,都不会影响程序的结果:

In [1]: !echo "f=lambda: print('func1')" > test_ipython.py

In [2]: from test_ipython import f

In [3]: f()
func1

In [4]: !echo "f=lambda: print('func2')" > test_ipython.py

In [5]: from test_ipython import f

In [6]: f()
func1

那么假如说我们希望这个函数修改之后被重载,应该怎么操作呢?IPython的魔术命令autoreload支持了这样的功能:

In [8]: %load_ext autoreload

In [9]: %autoreload 2

In [10]: !echo "f=lambda: print('func1')" > test_ipython.py

In [11]: from test_ipython import f

In [12]: f()
func1

In [13]: !echo "f=lambda: print('func2')" > test_ipython.py

In [14]: from test_ipython import f

In [15]: f()
func2

这里把autoreload的等级配置到2,这表示说所有的函数在运行之前都会被重载一次。也就是说,在运行过程中对函数模块的任何改动都会影响到运行结果。如果想关掉这个重载模块的功能,也只需要把autoreload配置成0就可以了:

In [13]: !echo "f=lambda: print('func2')" > test_ipython.py

In [14]: from test_ipython import f

In [15]: f()
func2

In [16]: %autoreload 0

In [17]: !echo "f=lambda: print('func1')" > test_ipython.py

In [18]: from test_ipython import f

In [19]: f()
func2

完整的参数配置,可以参考官方Doc的内容:

图片来自于参考链接1。

总结概要

在IPython中或者Jupyter Notebook中,一个函数被加载以后,如果这个函数或者模块的主体被修改了,那么就算是在IPython中重新Import一次,在程序执行中也只是去加载内存中的模块,而不是我们修改之后的内容。而IPython支持了一些魔术命令配置,其中autoreload这个魔术命令可以允许我们去配置是否需要重载函数模块。其中不仅包含通用性的全局配置,还支持指向性的配置方法。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/ipy-refresh.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

参考链接

  1. https://ipython.org/ipython-doc/3/config/extensions/autoreload.html

标签:autoreload,func2,ipython,test,模块,刷新,IPython
From: https://www.cnblogs.com/dechinphy/p/18093678/ipy-refresh

相关文章

  • Python实战:信号处理:signal模块
    1.引言在Unix-like操作系统中,信号是一种异步通知机制,用于在特定事件发生时通知进程。信号可以由内核、其他进程或进程自身发送。Python的signal模块提供了对Unix信号处理的接口,允许Python程序捕获和处理信号。掌握信号处理对于编写健壮、响应性好的Python程序至关重要。2......
  • BioPython模块的安装
     001、确认是否已经安装(base)[root@pc1~]#pythonPython3.11.4(main,Jul52023,14:15:25)[GCC11.2.0]onlinuxType"help","copyright","credits"or"license"formoreinformation.>>>importBioTraceback......
  • QT 常用模块介绍以及使用说明
    当学习QT编程时,掌握以下几个关键模块是非常重要的。下面是每个模块的简要说明及示例程序:QtWidgets模块:说明:QtWidgets模块包含用于创建传统桌面应用程序的UI控件。示例程序:#include<QApplication>#include<QWidget>intmain(intargc,char*argv[]){QApp......
  • python基础——异常、模块和包、pyecharts
    文章目录一、异常1、异常捕获2、异常传递二、python模块1、概念2、导入方式3、自定义模块4、python包5、导入第三方包三、pyecharts1、概念2、JSON数据格式一、异常1、异常捕获1.基本语法try: 可能发生错误的代码except: 如果出现异常应该执行的代码try: ......
  • 基于SpringBoot+HTML实现登录注册功能模块
    目录一、登陆注册实现思路二、实现具体步骤1.设计数据库表结构2.创建SpringBoot项目3.编写实体类4.编写Repository接口5.编写Service层6.创建Controller 7.编写前端页面Register.html: login.html: 8.进行测试登陆注册模块 三、总结博主介绍:✌专注......
  • web前端之node读取文件夹名称及html文件的标题、文件系统、路径处理、模块、正则、isD
    MENU代码解析代码constfs=require('fs');constpath=require('path');//文件夹路径//C:\mssj\web\web-case\case\nodeJs\index.js//C:\mssj\web\web-case\case\nodeJs\index.html//C:\mssj\web\web-case\case\ajaxProgressMoni......
  • 配置动态刷新@RefreshScope引起的取值为null
    配置动态刷新@RefreshScope引起的取值为null 在SpringCloudConfig动态刷新demo编写中,分为三个步骤: 1)git端配置更改,代码提交 2)手动刷新配置: POST请求:http://localhost:3355/actuator/refresh  3)客户端访问配置:http://localhost:3355/testConfig 控制类代码如下:......
  • 大模型推理框架 vLLM 源码解析(二):Block 模块分配和管理
    1.Block概览vLLM的一个很大创新点是将物理层面的GPU和CPU可用内存切分成若干个block,这样可以有效降低内存碎片化问题。具体而言,vLLM的block分为逻辑层面(logical)和物理层面(physical),二者之间存在映射关系。下图很好解释了两个层面block的关系。假设每个block可以......
  • skynet框架:量级可控的定时任务管理模块
    存在业务玩法,在单个场景内大量使用定时事件用于触发数据更新。skynet的定时器模块实现已经非常高效,一般不必太担心性能问题,事实上玩法的初版实现正是直接使用框架定时器处理触发。几个方面是期望做得更好的:减少外部消息。框架的定时事件是通过消息机制通知到指定service的,而单......
  • Python常用模块(random随机模块&json序列化模块)
    1.random随机模块返回两数之间的随机数,不包括尾数:random.randrange()importrandomprint(random.randrange(1,10))#3返回两数之间的随机数,包括尾数:random.randint()importrandomprint(random.randint(1,10))#返回1-10之间的一个随机数,包括10#7随机选取0到100间......