在Python中重新加载内置函数

时间:2017-03-14 23:21:10

标签: python python-3.x python-3.6 python-importlib built-in

我在Python中探索命名空间的概念,我无法解释以下内容:重新加载builtins无法有效地重新加载模块。这是一个例子:

import importlib as il
import os

import mymodule
mymodule.x = 6
print(mymodule.x)
mymodule = il.reload(mymodule)
print(mymodule.x)


import builtins
builtins.print = lambda x : os.system('echo hello')
builtins.print('hi')
builtins = il.reload(builtins)
builtins.print('hi')

mymodule只包含作业x = 5。输出是:

6
5
hello
hello

也许这是一个虚假的问题,但是这种行为的原因是什么?

1 个答案:

答案 0 :(得分:2)

来自docs

  

重新加载内置或动态加载的模块通常不是很有用。不建议重新加载sys__main__builtins和其他关键模块。在许多情况下,扩展模块不是设计为多次初始化,并且在重新加载时可能以任意方式失败。