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模块当中

原文地址:https://www.cnblogs.com/chaoguo1234/p/9248488.html

时间: 2024-10-18 12:07:17

Python中的reload函数的相关文章

python中有趣的函数

filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回: >>> def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] >>> def f

举例详解Python中的split()函数的使用方法

这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下 函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)os.path.split():按照路径将文件名和路径分割开 一.函数说明1.split()函数语法:str.

Python中的getattr()函数详解:

Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn't exist; without it, an exception i

python中的map()函数

MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下. 文档中的介绍在这里: map(function, iterable, ...) Apply function to every item of iterable and return a list of the results. If additional iterable arguments are passed, function must take that man

python中的生成器函数是如何工作的?

以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函数且这个函数尚未返回时获取,可能通过inspect模块的currentframe()函数获取当前栈帧. 栈帧对象中的3个常用的属性: f_back : 调用栈的上一级栈帧 f_code: 栈帧对应的c f_locals: 用在当前栈帧时的局部变量; 比如: >>&g

python进阶一(函数式编程)【2-2 python中的map函数】

2-2 python中的map()函数 python中map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 原文地址:https://www.cnblogs.com/ucasljq/p/11609544.html

python进阶一(函数式编程)【2-3 python中的reduce函数】

2-3 python中的reduce函数 python中reduce()函数 reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值. 例如,编写一个f函数,接收x和y,返回x和y的和: 1 def f(x, y): 2 return x + y 调用 reduce(f, [

Python中关于Lambda函数的使用总结

lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的对应关系 定义func函数,计算给定数x的平方 def func(x): return x*x 等价于 func = lambda x: x*x 其中func是函数名,x是输入参数,x*x是输出结果 输入参数可以有多个,可以接收不定参数如*args或者**kwargs. f = lambda x,

python里使用reload函数

本文和大家分享的主要是python 中reload 函数的使用相关内容,一起来看看吧,希望对大家 学习python 有所帮助. reload 函数是使用模块名称,而不是变量名称,也就是说当你把它改变了名称,它也是加载原来的名称. 当使用reload 时,这个模块会被重新编译,新的模块替换原来的模块.如果之前从这个模块创建的实例仍然使用旧的模块实现.特别是使用 from-import 语句加载的名称,也不会被更新. 例如: # File: builtin-reload-example-1.py f