2013-06-17 14 views
17

Przypadkowo nadpisałem numer set, używając go jako nazwy zmiennej w interaktywnej sesji Pythona - czy jest jakiś sposób uzyskania dostępu do oryginalnej funkcji set bez restartowania mojej sesji?Jak przywrócić wbudowany przeze mnie przypadek?

(mam tyle rzeczy w tej sesji, że raczej bym nie musiał tego robić, choć oczywiście mogę w razie potrzeby).

Odpowiedz

28

Wystarczy usunąć nazwę, która jest maskowanie polecenie wbudowane:

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

Zawsze można nadal uzyskać dostęp do oryginalnych wbudowane przez nazw __builtins__; to wykorzystać, jeśli chcesz zastąpić wbudowany, ale chcą odroczyć do oryginału nadal z ręcznym:

__builtins__ pochodzi od __builtin__ module (Python 2, należy zwrócić uwagę na brak s) lub builtins module (Python 3, z s bez podkreśleń).

Jeśli masz problem ze znalezieniem nazwy maskowania, sprawdź wszystkie przestrzenie nazw od bieżącego do wbudowanych; zobacz, Short Description of the Scoping Rules?, jakie zakresy mogą mieć zastosowanie do Twojej obecnej sytuacji.

+1

To fantastycznie prosta sztuczka, dzięki! – weronika

+0

Awesome, bardzo przydatne przy użyciu linii poleceń python :) – razzak

+0

Nie działa dla mnie w Pythonie 3. Dostaję błąd, że 'open' nie jest definiowany, kiedy go usuwam. –

6

Można użyć __builtin__:

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

lub po prostu (nie wymaga importu):

For Python 3:

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

Od docs:

realizacja CPython detal: Użytkownik nie powinien dotykać __builtins__; to jest ściśle szczegółem realizacji. Użytkownicy chcący zastąpić wartości w przestrzeni nazw powinni zaimportować moduł __builtin__ (bez 's') i odpowiednio zmodyfikować jego atrybuty.

+0

No i co mam zrobić, jeśli zmieniono metodę 'builtins.open'? –

+0

@ TomášZato Wtedy nie można go odzyskać tak daleko, jak wiem. Jeśli twoja aplikacja wymaga zrobienia czegoś takiego, powinieneś zachować odniesienie nietknięte do takich zmiennych. –

Powiązane problemy