经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
IPython刷新函数模块
来源:cnblogs  作者:DECHIN  时间:2024/3/25 9:55:41  对本文有异议

技术背景

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

魔术命令配置

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

  1. In [1]: !echo "f=lambda: print('func1')" > test_ipython.py
  2. In [2]: from test_ipython import f
  3. In [3]: f()
  4. func1
  5. In [4]: !echo "f=lambda: print('func2')" > test_ipython.py
  6. In [5]: from test_ipython import f
  7. In [6]: f()
  8. func1

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

  1. In [8]: %load_ext autoreload
  2. In [9]: %autoreload 2
  3. In [10]: !echo "f=lambda: print('func1')" > test_ipython.py
  4. In [11]: from test_ipython import f
  5. In [12]: f()
  6. func1
  7. In [13]: !echo "f=lambda: print('func2')" > test_ipython.py
  8. In [14]: from test_ipython import f
  9. In [15]: f()
  10. func2

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

  1. In [13]: !echo "f=lambda: print('func2')" > test_ipython.py
  2. In [14]: from test_ipython import f
  3. In [15]: f()
  4. func2
  5. In [16]: %autoreload 0
  6. In [17]: !echo "f=lambda: print('func1')" > test_ipython.py
  7. In [18]: from test_ipython import f
  8. In [19]: f()
  9. 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

原文链接:https://www.cnblogs.com/dechinphy/p/18093678/ipy-refresh

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号