码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 热加载技术:修改Python代码并实时查看结果 ⛵


    💡 作者:韩信子@ShowMeAI
    📘 Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56
    📘 本文地址:https://www.showmeai.tech/article-detail/406
    📢 声明:版权所有,转载请联系平台与作者并注明出处
    📢 收藏ShowMeAI查看更多精彩内容

    💡 引言

    在运行 Python 脚本时,我经常发现自己忘记打印所有必要的详细信息来跟踪代码项目的进度和中间信息。我们经常在训练机器学习模型时遇到各种各样的信息记录问题,当然,问题不仅限于机器学习,像爬虫等场景也需要做大量记录,但我们经常在运行起代码之后才意识到忘记做一些需要记录的信息输出。

    如果我们暂停运行的代码,重新修改补充代码并运行,代价可能是我们已经训练数个小时的模型参数被舍弃而重新训练,这是非常不值当的。在python中,有另外一项技术可以解决这个问题,在本篇内容中,我们就来给大家讲讲python的热加载技术。

    💡 Reloading库

    📘Reloading 是一个 Python工具库,它让我们可以在每次迭代之前从源代码中重新加载(或函数),我们可以修改已经运行的代码并向其添加更多详细信息,而不会丢失任何当前已执行过程。

    我们可以通过以下命令安装reloading:

    pip install reloading
    
    • 1

    💦 重新加载循环体代码

    假设我们有一个循环,它完成一个简单的功能:每次迭代后将值减半。但我们忘记在这个循环中打印迭代次数了,现在想修改它。

    from time import sleep
    
    value = 100
    iterations = 10
    
    for iteration in range(iterations):
    
        print(f"value = {value}")
        value = value/2
        sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    不借助reloading,我们只能重新运行它。

    但是,借助 reloading,我们可以重新加载循环体代码,如下所示:

    from time import sleep
    from reloading import reloading
    
    value = 100
    iterations = 10
    
    for iteration in reloading(range(iterations)):
    
        print(f"value = {value}")
        value = value/2
        sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    动图演示如下:

    💦 重新加载修改后的函数

    与重新加载循环体代码类似,我们也可以在每次迭代后重新加载函数体。以函数 half_value为例:

    from time import sleep
    
    def half_value(value):
        print(f"value = {value}")
        value = value/2
        return value
    
    value = 100
    iterations = 10
    
    for iteration in range(iterations):
    
        value = half_value(value)
        sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    要重新加载函数体,我们可以使用 reloading构建装饰器。如下所示:

    from time import sleep
    from reloading import reloading
    
    @reloading
    def half_value(value):
        print(f"value = {value}")
        value = value/2
        return value
    
    value = 100
    iterations = 10
    
    for iteration in range(iterations):
    
        value = half_value(value)
        sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    修改之后,我们可以在运行时修改函数。动图演示如下:

    参考资料

    • 📘 Reloading 的GitHub网址:https://github.com/julvo/reloading

    推荐阅读

    • 🌍 数据分析实战系列 :https://www.showmeai.tech/tutorials/40
    • 🌍 机器学习数据分析实战系列:https://www.showmeai.tech/tutorials/41
    • 🌍 深度学习数据分析实战系列:https://www.showmeai.tech/tutorials/42
    • 🌍 TensorFlow数据分析实战系列:https://www.showmeai.tech/tutorials/43
    • 🌍 PyTorch数据分析实战系列:https://www.showmeai.tech/tutorials/44
    • 🌍 NLP实战数据分析实战系列:https://www.showmeai.tech/tutorials/45
    • 🌍 CV实战数据分析实战系列:https://www.showmeai.tech/tutorials/46
    • 🌍 AI 面试题库系列:https://www.showmeai.tech/tutorials/48

  • 相关阅读:
    http客户端Feign
    matlab实现神经网络算法,matlab神经网络训练函数
    代码随想录59——单调栈:503下一个更大元素II、42接雨水
    CSS中如何实现文字描边效果(Text Stroke)?
    golang知识点整理
    高效开发之:List去重简便方法
    LeetCode(37)矩阵置零【矩阵】【中等】
    SpringSecurity源码学习二:异常处理
    【从头构筑C#知识体系】1.4 事件
    六、C++ 运算符重载
  • 原文地址:https://blog.csdn.net/ShowMeAI/article/details/128125560
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号