我在交互式 Python 会话中将
set
用作变量名,不小心覆盖了它 - 有什么方法可以让我在不重新启动会话的情况下访问原始 set
函数?
(我在那次会议中有太多东西,我宁愿不必这样做,尽管如果有必要的话我当然可以。)
只需删除掩盖内置名称的名称即可:
>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>
builtins
模块访问原始内置模块(Python 2 上的 __builtin__
,带下划线,没有 s
);如果您想覆盖内置但想要从覆盖中推迟到原始静止图像,请使用此功能:
>>> import builtins
>>> builtins.set
<type 'set'>
如果您无法找到屏蔽名称的定义位置,请检查从当前名称空间到内置名称空间的所有名称空间;请参阅范围规则的简短描述?了解哪些范围可能适用于您当前的情况。
builtins
:
>>> import builtins
>>> builtins.set
<class 'set'>
__builtin__
:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
或者简单地(不需要进口):
>>> __builtins__.set
<type 'set'>
来自文档:
CPython 实现细节:用户不应触摸
;它 严格来说是一个实施细节。想要覆盖值的用户 在__builtins__
命名空间中应导入builtins
(无“s”) 模块并适当修改其属性。__builtin__
要使用内置包装器,首先将其原始地址分配到像
X
这样的变量中
工作完成后,将其设置为
None
并将原始地址设置回内置函数。
示例
X = __builtin__.isinstance
__builtin__.isinstance = myisinstance
工作完成了
__builtin__.isinstance = None
__builtin__.isinstance = X