我set在交互式python会话中使用它作为变量名称而意外地覆盖了 - 有没有什么办法可以在set不重新启动会话的情况下访问原始函数?
(我在那个会话中有很多东西,我宁愿不必这样做,虽然我当然可以在必要的时候.)
Mar*_*ers 45
只需删除掩盖内置的名称:
>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>
Run Code Online (Sandbox Code Playgroud)
您始终可以通过builtins 命名空间访问原始内置内容; 如果要覆盖内置但希望从覆盖中推迟原始静止,请使用此选项:
>>> import builtins
>>> builtins.set
<type 'set'>
Run Code Online (Sandbox Code Playgroud)
__builtin__源自s模块(Python 2,注意缺少builtins)或__builtin__模块(Python 3,s但没有下划线).
如果您无法找到定义屏蔽名称的位置,请检查从当前命名空间到内置命令的所有命名空间; 请参阅范围规则的简短描述?适用于您当前情况的范围.
你可以使用__builtin__:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
Run Code Online (Sandbox Code Playgroud)
或简单(不需要进口):
>>> __builtins__.set
<type 'set'>
Run Code Online (Sandbox Code Playgroud)
>>> import builtins
>>> builtins.set
<class 'set'>
Run Code Online (Sandbox Code Playgroud)
来自docs:
CPython实现细节:用户不应该触摸
__builtins__; 它严格来说是一个实现细节.想要覆盖builtins命名空间中的值的用户应该导入__builtin__(no's')模块并适当地修改其属性.