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