Ich versuche eine Funktion zum Löschen einer anderen Funktion zu erstellen.
%Vor%ist was ich bisher habe, aber aus irgendeinem Grund funktioniert es nicht.
%Vor%scheint nicht den Trick zu machen. Ich weiß, dass man es leicht machen kann, nur
%Vor%aber ich versuche es anders zu machen. Wie?
Das Löschen einer Funktion ist nicht wirklich etwas, was Sie an der Funktion selbst vornehmen; Es ist etwas, was du mit dem Namensraum machst, in dem es lebt. (Genauso wie du die Nummer 3 aus einer Liste entfernst, ist es nichts, was du mit der Nummer 3 machst, sondern mit der Liste.)
Angenommen, Sie sagen
%Vor% Dann (mehr oder weniger) haben Sie zwei Namen, foo
und bar
, für genau die gleiche Funktion. Angenommen, Sie rufen delete_function(foo)
oder delete_function(bar)
auf. Das exakt gleiche Ding , nämlich ein Funktionsobjekt, wird an delete_function
übergeben. Aber was Sie eigentlich entfernen möchten, ist die Assoziation zwischen dem Namen foo
oder bar
und diesem Objekt - und es gibt keine Möglichkeit, wie delete_function
oder foo
oder etwas anderes, das du loswerden willst.
(Naja ... Eigentlich ist es da. Es gibt hässliche Hacky-Dinge, die Sie tun können, damit der Code in bar
mehr darüber weiß, wie er heißt. Aber denken Sie nicht einmal darüber nach, darüber nachzudenken.)
Also. Ihre Optionen sind wie folgt. (1) Nasty hacky Dinge, wie gerade erwähnt. Nicht. (2) Übergeben Sie delete_function
nicht das Funktionsobjekt, sondern Informationen über den Namen der Funktion und die Sache, von der Sie versuchen, sie zu löschen. Das ist hässlich und plump. (3) Mach dir keine Mühe.
Ich empfehle dringend # 3, es sei denn ist der einzige Grund, warum Sie das tun, mehr über Python zu erfahren. In letzterem Fall könnte ein guter Ausgangspunkt sein Ссылка .
Da foo
global ist, können Sie es aus den globalen Definitionen löschen:
Es wird einfach nicht funktionieren.
Was Sie versuchen, ist im Wesentlichen der Namensraum des Aufrufers.
Versuchen Sie Folgendes:
%Vor%Beachten Sie, dass
foo
. del
ist eine Anweisung und keine Funktion Wenn Sie das del
in einer Funktion delete_function()
ausführen, wird im Wesentlichen die Zuweisung innerhalb Ihrer Funktion entfernt (was wirkungslos ist, weil die Funktion sofort beendet wird), während der Aufrufer die Zuweisung behält.
Streng genommen löscht del
keine Objekte, sondern lediglich Zuweisungen von Namen an Objekte. Objekte werden "automatisch" gelöscht (Garbage Collection), sobald sie nicht mehr referenziert sind.
Es könnte funktionieren, was Sie versuchen, indem Sie den Stapelrahmen und die Übergabe des Namens, der als Zeichenfolge gelöscht werden soll, tun, aber es wäre ein PITA.
Vielleicht versuchst du
%Vor%oder
%Vor%? Aber ich denke, es ist nicht garantiert, dass es wirklich das echte lokale Wörterbuch ändert, es könnte genauso gut auf einer Kopie funktionieren und somit wirkungslos bleiben ...
Tags und Links python