【问题标题】:Reloading builtins in Python在 Python 中重新加载内置函数
【发布时间】:2017-03-14 23:21:09
【问题描述】:

我正在探索 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

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

【问题讨论】:

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


    【解决方案1】:

    来自docs

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

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 2018-08-29
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2011-11-08
      • 2019-09-13
      • 2013-08-24
      相关资源
      最近更新 更多