zoukankan      html  css  js  c++  java
  • 在python中重新导入模块

    重新加载模块

    倘若,更改了已经在 Python shell 中导入的模块,然后重新导入该模块,Python 会认为“我已经导入了该模块,不需要再次读取该文件”,所以更改将无效

    要解决这个问题,有以下几种方式:

    1. 最简单、最有效的方法:重新启动 Python shell。但是,这也有缺点,特别是丢失了 Python shell 名称空间中存在的数据以及其他导入模块中的数据。
    2. 对于简单的情况,可以使用 Python 的reload()函数。在许多情况下,在编辑一个模块之后就足够了。
    3. 对于更复杂的情况,重新加载被编辑的模块也需要重新加载其依赖/导入的模块(因为它们必须作为被编辑模块初始化的一部分进行初始化),所以 IPython 的autoreload扩展很有用。

    PS:

    下面主要介绍第 2 种方式 - reload(),其他方式自行尝试。
    reload()是 Python 提供的一种简洁的方式,在不同的 Python 版本中有不同的表现形式:

    >>> import importlib
    >>> import hello
    Hello, Python!  # 修改前的内容
    >>> 
    >>> importlib.reload(hello)
    I am coming...  # 修改后的内容
    <module 'hello' from '/home/wang/Projects/hello.py'>
    

    另外的参考

    为防止两个模块互相导入的问题,Python默认所有的模块都只导入一次,如果需要重新导入模块,
    Python2.7可以直接用reload(),Python3可以用下面几种方法:

    方法一:基本方法
    from imp import reload
    reload(module)

    方法二:按照套路,可以这样
    import imp
    imp.reload(module)

    方法三:看看imp.py,有发现,所以还可以这样
    import importlib
    importlib.reload(module)

    方法四:根据天理,当然也可以这样
    from importlib import reload
    reload(module)


    参考原文:https://www.jianshu.com/p/02c24557e91e
  • 相关阅读:
    插入排序
    选择排序
    二分法查找
    pickle模块的使用
    循环和递归求阶乘、递归实现汉诺塔程序、递归实现拆出每个位的数字放在列表中、递归求第五个人的年龄
    app测试和测试基础
    TCP协议中的三次握手和四次挥手及其他
    AcWing 122 糖果传递
    AcWing 121 赶牛入圈 (二分+离散化)
    AcWing 120 防线 (二分)
  • 原文地址:https://www.cnblogs.com/mlgjb/p/10282029.html
Copyright © 2011-2022 走看看