2015-07-05 6 views
5

Ich habe vor kurzem den Wechsel von Python 2 zu Python 3 gemacht. Python 3 documentation liest: "Removed reload(). Verwenden imp.reload()" Es sagt nicht wirklich warum, obwohl.Warum wurde das Reload von Python-Builtins im Switch zu python3 entfernt?

This Frage beschreibt, wie es jetzt in Python getan 3. Hat jemand eine Ahnung, warum es von den Einbauten entfernt worden ist und erfordert jetzt imp oder importlib neu zu laden? Wenn Sie ein Programm testen, während Sie es mit der interaktiven Eingabeaufforderung erstellen, ist es sehr praktisch, wenn Sie es direkt dort neu laden. Natürlich kann ich das bekommen, indem Sie so etwas wie

from imp import reload 

zurück Es ist nur eine weitere Zeile Code jedes Mal, wenn ich öffnen Sie eine interaktive Eingabeaufforderung zu Testcode. Was ist der Grund für diese Veränderung?

+0

Es ist weniger universal oder wichtig die verbleibenden eingebauten. In einem bestimmten Ausführungskontext praktisch zu sein, ändert das nicht. – user2864740

+2

Ich denke, es war, weil zu viele Leute es in Builtins sitzen sahen und es verwendeten, ohne seine Grenzen zu verstehen. Wenn man es in ein Modul steckt, ist es weniger wahrscheinlich, dass die Leute es benutzen, ohne zu wissen, was sie tun. Ich kann jedoch keine zuverlässige Quelle für diese Informationen finden. – BrenBarn

Antwort

3

reload() wurde aus den Einbauten entfernt als eine der Python Regrets Guido in einem Keynote address at OSCON 2002 (Schieber 6) ausgedrückt. Siehe PEP 3100 - Miscellaneous Python 3.0 Plans, die mehrere Änderungen nennt, die ihren Ursprung auf diese Diskussion zurückführen.

Von der Folie würde ich sagen, er erwartet exec() verwendet werden; das würde sicherlich den häufigsten Anwendungsfall abdecken, iterativ Code in einem Editor zu entwickeln und ihn in einem interaktiven Interpreter erneut zu testen.

jedoch bei der Diskussion PEP 3121 - Extension Module Initialization and Finalization Guido fand schnell heraus, dass er die Funktion verpasst:

Ja; Ich bin nicht sicher, ob das Modul erneut geladen wird in Py3k oder nicht. Wenn nicht, sollte es aus dem PEP entfernt werden, wenn ja, sollte angegeben werden.

ich bereits fehlt den Reload() builtin, so denke ich, es um in irgendeiner Form gehalten werden sollte. Ich erwarte, dass irgendeine Form der Nachladefunktion verfügbar bleibt, vielleicht irgendwo im Modul imp.

Also, kurz gesagt, reload() zuerst entfernt wurde, dann, wenn es verpasst wurde, wurde imp.reload() hinzugefügt. Es musste sowieso nicht unbedingt eingebaut sein, ich benutze es sicher nur selten.

In Python 3.4 the function was moved zu .

+1

Beachten Sie, dass "reload" [vor kurzem verschoben] (http://bugs.python.org/issue18193) nach "importlib" verschoben wurde. Wenn Sie also neuen Code schreiben, der auf aktuelle Versionen abzielt, sollten Sie 'importlib.reload' direkt verwenden Vermeiden Sie spätere Probleme, wenn die Funktion offiziell veraltet und später entfernt wird. – poke