技术背景

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

IPython刷新函数模块的更多相关文章

  1. 配置php支持gd函数模块

    配置php支持gd函数模块 今天在联系上线源码包tttuangou 的时候,出现了对gd_info和imagecreatefromjpeg模块缺失的提示,我丈二和尚摸不着头脑,决定彻底学习一番 什么是 ...

  2. 函数模块:CTVB_COMPARE_TABLES--两个表中删除/变更/粘贴分解

    这个函数模块比较两个内表,将被删除.增加和修改的内表行分别分组输出. 输入参数:TABLE_OLD:旧表TABLE_NEW:新表KEY_LENGTH:键长度,指定内表中的前若干个字节(在 Unicod ...

  3. C程序中引用自定义的C函数模块

    原文:C程序中引用自定义的C函数模块 我们知道,刚开始接触C语言编程,一般都是在一个.c或者.cpp(以下只说.c)的文件中编写代码,其中一定会有一个入口函数, 也就是main()函数,你可以将程序代 ...

  4. odoo研究学习:刷新本地模块列表都干了什么事?

    模块信息存储在ir.module.module 数据表中 平时在开发过程中经常会刷新本地模块列表,例如:新增了模块.更新了模块基础信息.更换了模块图标等等,在点击‘更新’按钮的时候odoo平台到底干了 ...

  5. MFC 刷新函数:Invaldate,UpdateWindow,InvaldateRect

    在窗口刷新和绘制的过程中,常常需要用到窗口刷新函数.一般用于窗口图形刷新的函数有:UpdateWindows().Invaldate().InvaldateRect(). 先说UpdateWindow ...

  6. Python_selenium中类函数模块的简单介绍

    Python_selenium中类函数模块的简单介绍 一.demo1.py的代码如下所示 #coding:utf-8 class ClassA(object): string = "这是一个 ...

  7. python基础12 ---函数模块2

    函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...

  8. python基础11 ---函数模块1

    函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该 ...

  9. 【VS开发】MFC中调用C函数模块的解决方案

    [VS开发]MFC中调用C函数模块的解决方案 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:最近调试基于MFC的程序 ...

  10. cmath模块——复数域数学函数模块

    cmath——复数域数学函数模块 转自:https://blog.csdn.net/zhtysw/article/category/7511293 该模块属于内置模块,随时可以调用.它提供了数学函数在 ...

随机推荐

  1. 使用memoizee缓存函数提升性能,竟引发了indexOf的性能问题

    壹 ❀ 引 公司前端组基本每个月会举行一次前端月会,用于做前端组基础设施以及其它重要信息的同步,会议最后一个环节就会分享本月前端同学在开发中所遇到的奇怪bug,或者一些有趣的问题.在分享的问题中,我发 ...

  2. STM32的时钟控制RCC和外设定时器

    STM32的RCC(Reset and Clock Control)时钟控制 stm32f103c8的时钟是72MHz, stm32f401ccu6的时钟是80M, 开发板板载两个晶振, 一个高速一个 ...

  3. 【Unity3D】相机

    1 简介 ​ 相机用于渲染游戏对象,每个场景中可以有多个相机,每个相机独立成像,每个成像都是一个图层,最后渲染的图层在最前面显示. ​ 相机的属性面板如下: Clear Flags:设置清屏颜色,Sk ...

  4. 【Android】使用BluetoothSocket实现跨设备通讯

    1 前言 使用Socket实现跨设备通讯 中介绍了使用 WiFi 通道实现跨设备通讯,本文将介绍使用 Bluetooth 通道实现跨进程通讯. ​ 本文全部代码见→使用BluetoothSocket实 ...

  5. spring boot使用拦截器修改请求URL

    假如我要将请求路径中/foobar都去掉? 1.定义拦截器 package com.laoxu.test.helloweb; import org.springframework.stereotype ...

  6. java打印杨辉三角

    package com.dylan.practice.interview; /** * 打印杨辉三角 * * 原理 * 1.每个数等于它上方两数之和 * 2.第n行的数字有n个 * * @author ...

  7. 前后端分离解决跨域cors问题

    修改windows的hosts文件 vim C:\Windows\System32\drivers\etc\hosts 添加域名 前端:www.luffycity.cn 后端:api.luffycit ...

  8. java+mysql学生信息管理系统

    实现:mysql+eclipse(idea设置之后也可运行)+jdk8 功能: 管理员:管理登+管理员注册 学生:添加学生信息+删除学生信息+修改学生信息+查询学生信息+学生列表展示 界面展示: 详情 ...

  9. 【MongoDB】C# .Net MongoDB常用语法

    1.1.驱动安装 使用NuGet包管理器安装MongoDB C#驱动:MongoDB.Driver 1.2. C#连接MongoDB //获取MongoDB连接客户端 MongoClient clie ...

  10. 以下总结了Java一些面试前准备和技术参考题,希望对你有所帮助

    以下真实模拟JAVA面试场景: 感谢您参加我们的面试: 以下是我们总结一些面试前准备和技术参考题,希望对你有所帮助. 首先,你需要先准备下工作相关的自我介绍,包括以下内容: 几年 Java 开发经验, ...