2015-07-05 25 views
5

Niedawno dokonałem przełączenia z Pythona 2 na Pythona 3. Python 3 documentation brzmi: "Usunięto przeładowanie() .Użyj imp.reload()" Nie tak naprawdę to wyjaśnia dlaczego.Dlaczego reload został usunięty z wbudowanych pythonów w przełączniku na python3?

This pytanie opisuje, jak to się robi teraz w Pythonie 3. Czy ktoś ma jakiś pomysł, dlaczego to zostało usunięte z wbudowanej ins i teraz wymaga imp lub importlib przeładować? Podczas testowania programu podczas budowania go za pomocą interaktywnego monitu, przeładowanie tam domyślnie jest super wygodne. Oczywiście mogę to odzyskać, robiąc coś takiego, jak np.

from imp import reload 
To tylko kolejna linia kodu za każdym razem, gdy otwieram interaktywny monit o testowanie kodu. Jakie jest uzasadnienie tej zmiany?

+0

Musi mniej uniwersalne lub ważne pozostałe wbudowane. Poręczność w jednym konkretnym kontekście wykonania nie zmienia tego. – user2864740

+2

Myślę, że było tak dlatego, że zbyt wielu ludzi widziało, że siedzi tam we wbudowanych i używało go, nie rozumiejąc jego ograniczeń. Umieszczenie go w module zmniejszyło prawdopodobieństwo, że ludzie będą go używać, nie wiedząc, co robią. Nie mogę jednak znaleźć wiarygodnego źródła tych informacji. – BrenBarn

Odpowiedz

3

reload() usunięto z wbudowanym in jako jeden z Pythonie ubolewa Guido ekspresji w Keynote address at OSCON 2002 suwaka (6). Zobacz PEP 3100 - Miscellaneous Python 3.0 Plans, która podaje kilka zmian, które śledzą ich pochodzenie.

Ze slajdu powiedziałbym, że spodziewał się użyć exec(); to z pewnością pokryłoby najczęstsze przykłady iteracyjnego tworzenia kodu w edytorze i ponownego testowania go w interaktywnym tłumaczu.

Jednak przy omawianiu PEP 3121 - Extension Module Initialization and Finalization Guido szybko okazało się, że brakowało mu funkcję:

TAK; Nie jestem pewien, czy przeładowanie modułów jest nadal wspierane przezw Py3k, czy nie. Jeśli nie, należy go usunąć z PEP, jeśli tak, należy podać .

Brakuje już wbudowanego reload(), więc myślę, że powinno ono być przechowywane w pewnej formie w postaci . Oczekuję, że jakaś forma funkcji ponownego ładowania będzie dostępna, prawdopodobnie gdzieś w module imp.

Tak, w skrócie, reload() został usunięty, a dopiero potem, kiedy została ona brakowało, imp.reload() został dodany. Tak naprawdę to nie musiało być wbudowane, z pewnością rzadko go używam.

W języku Python 3.4 the function was moved na importlib.reload().

+1

Zauważ, że 'ponowne załadowanie' zostało [ostatnio przeniesione] (http://bugs.python.org/issue18193) do' importlib', więc jeśli piszesz nowy kod kierujący bieżącymi wersjami, powinieneś użyć 'importlib.reload' bezpośrednio do uniknąć późniejszych problemów, gdy funkcja ostatecznie zostanie oficjalnie uznana za przestarzałą, a następnie usunięta. – poke