撤消Python内置的覆盖

时间:2015-03-06 16:52:26

标签: python function module namespaces built-in

在Python中有几个built-in functions。以例如open为例。我可以通过执行以下操作来启动Python控制台并获取有关open的一些信息:

>> open    
>>(built-in function open)

但如果我要做这样的事情:

>> # I know it's bad practice to import all items from the namespace    
>> from gzip import *    
>> open    
>>(function open at 0x26E88F0)

对于我的控制台会话的其余部分,似乎对open函数的所有调用都不会使用内置函数,而是使用gzip模块中的函数。有没有办法将Python中的内置函数重新定义为原始函数?如果我参考了所需的功能,这很容易,如下所示:

def MyOpen(path):
  print('Trivial example')

open = MyOpen

如果覆盖了这些引用后,如何获取内置函数的引用?

1 个答案:

答案 0 :(得分:13)

您只需删除全局:

即可
del open

或者您可以导入__builtin__ module(Python 2)或builtins module(Python 3)以获取原始内容:

import __builtin__

__builtin__.open

名称查找首先进入全局命名空间,然后进入内置命名空间;如果删除全局名称open,它将不再存在,并且名称查找将进入内置命名空间,或者您可以通过导入的模块直接访问该命名空间。