撤消 Python 内置的覆盖

Undo Overwrite of Python Built-In

在Python中有几个built-in functions。以open为例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

一旦这些引用被覆盖,您如何获得对内置函数的引用?

您可以简单地删除全局:

del open

或者您可以导入 __builtin__ module (Python 2) or builtins module (Python 3) 以获得原始的:

import __builtin__

__builtin__.open

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