zoukankan      html  css  js  c++  java
  • Python中的reload函数

    Python中的import语句可以导入module文件,但是import语句只是第一次导入的时候会执行module文件中的代码,然后就会把导入的模块文件存入到内存,当再次导入的时候,Python是直接从内存里面取出module文件,而不会执行module文件的内容了,而reload函数强制Python重新导入并执行module文件。

    假设有module文件a.py:

    def changer():
        print("First Version")

    然后在可交互的控制台执行如下代码:

    >>>import a
    >>>a.changer()
    "First Version"

    然后我们不退出可交互式控制台,然后修改a.py:

    def changer():
        pirnt("Second Version")

    然后在到可交互的控制台执行如下代码:

    >>>import a
    >>>a.changer()         # 已经导入的module文件,直接从内存里面取,不会执行
    "First Version"
    
    
    >>>from imp import reload   # 对于Python 3.X来说,reload不是内置函数,而是imp module的一个函数
    >>>reload(a)
    <module 'a' form '/home/chaochao/python/a.py'>
    >>>a.changer()       # 对module文件a.py的改动反映出来了
    "Sencond Version"

    注意事项

    1 由于import导入的moudle文件,使用的时候需要使用module.attr的方式,而reload会强制运行module文件,那么,会对使用import导入进来的module文件有影响,因为reload执行module文件后,module.attr的值会被覆盖;

    2 由于from导入的module文件,其本质是进行了一个赋值操作,即在当前文件中(即执行from语句的文件)进行attr = module.attr,那么,reload函数对reload运行之前的from语句没有影响,换句话说,当前文件(即执行from语句的文件)中的变量attr与module.attr引用的已经是两个不同的变量了;

    3 假设a.py自己import b.py,那么reload(a)并不会reload(b),也就是说,reload不具有传递性

    4 使用reload的前提,是reload的 模块,之前已经使用import或者from导入成功了,否则,reload也无法生效

    5 对于Python 2.X来说,reload是一个内置函数,而Python 3.X将reload函数移动到了imp模块当中

  • 相关阅读:
    Java之hashCode的作用和equals方法的重构规则
    Java-IO流之File操作和Properties操作
    Java-IO流之转换流的使用和编码与解码原理
    Java-IO 字节流的使用和效率比较
    Java-IO流之BufferedReader 和BufferedWriter的使用和原理
    二分查找
    leetcode530 二叉搜索树的最小绝对差
    leetcode94 二叉树的中序遍历
    leetcode17电话号码字母组合
    leetcode26 删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/9248488.html
Copyright © 2011-2022 走看看