Как восстановить встроенный, который я перезаписал случайно?

Я случайно перезаписал set, используя его как имя переменной в интерактивном сеансе python - есть ли способ получить доступ к исходной функции set, не перезапустив сеанс?

(В этом сеансе у меня так много вещей, что я не хочу этого делать, хотя, конечно, могу, если это необходимо.)

Ответы

Ответ 1

Просто удалите имя, которое маскирует встроенный файл:

>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>

Вы всегда можете получить доступ к встроенному оригиналу через пространство имен __builtins__; используйте это, если вы хотите переопределить встроенный, но хотите отложить до исходного по-прежнему от переопределения:

>>> __builtins__.set
<type 'set'>

__builtins__ поступает из модуля __builtin__ (Python 2, обратите внимание на отсутствие s) или builtins module (Python 3, с s, но без подчеркивания).

Если вам трудно найти, где определено имя маскировки, проверьте все пространства имен от вашего текущего до встроенных; см. Краткое описание правил определения области видимости?, для каких областей действия могут применяться к вашей текущей ситуации.

Ответ 2

Вы можете использовать __builtin__:

>>> import __builtin__
>>> __builtin__.set
<type 'set'>

или просто (импорт не требуется):

>>> __builtins__.set
<type 'set'>

Для Python 3:

>>> import builtins
>>> builtins.set
<class 'set'>

Из docs:

Подробности реализации CPython. Пользователи не должны касаться __builtins__; Это является строго описанием реализации. Пользователи, которые хотят переопределить значения в пространстве имен builtins следует импортировать __builtin__ (no 's) модуль и соответствующим образом изменить его атрибуты.