Warum ist mein python-Funktion nicht definiert, wenn es vorhanden ist, in der gleichen Datei?
Habe ich eine einfache Funktion, die ich nennen werde myFunction
. Es nimmt zwei Parameter entgegen, führt einige Berechnungen durch und gibt das Ergebnis zurück.
Ich habe auch eine Klasse MyClass
, die hat einen Konstruktor, der hat ein Kopf wie dieser:
__init__(self, bar, fun=myFunction):
Wenn ich versuche zu laufen, alles in dieser Klasse, bekomme ich die folgende Fehlermeldung:
MyClass
def __init__(self, bar, fun=myFunction):
NameError: name 'myFunction' is not defined
Wenn ich entfernen Sie diese Klasse, die ich nutzen kann myFun in der Python-Shell, so was ist der deal?
Bitte markieren Sie die richtige Antwort als Lösung. Wir wählen Lösungen, die Weise nicht, indem ich sage, was ist die Lösung durch Bearbeiten der Frage.
InformationsquelleAutor user1123936 | 2012-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen angezeigt, noch nicht den eigentlichen code, also ist es schwer sicher zu sein, aber ich Wette
myFunction
ist definiert nachMyClass
. Der default-Wert ist Ausdruck ausgewertet wird, wenn die__init__
Methode definiert ist, somyFunction
definiert werden müssen. Definition es später zu spät ist.+1 Genau. Zu erreichen mit ähnlicher Wirkung, die Sie zuweisen können
None
(oder irgendetwas anderes, aber es muss definiert werden) als Standard-argument und später vergleichen und schließlich weisen Sie diemyFunction
- Funktion (diese Zuordnung wird bewertet, wenn die Methode tatsächlich aufgerufen wird).Python ist eine der einfachsten (nicht dass es nicht leistungsfähig), einfachste, effizienteste Programmierung Sprachen, die ich je gekannt habe. Wahrscheinlich ist er zuerst in alle der oben genannten, so, wenn Sie könnte noch etwas besser wird, wäre ich sehr dankbar 🙂 Wirklich.
das problem ist, dass Python zu Lesen versucht die Datei runter und analysiert alles, was ohne ausgeführt, bis Sie nicht mehr können (weil es muss eine Art von Berechnung, die zum analysieren der rest). Ich weiß nicht die genaue Idee, die hinter es, aber es macht intuitiv Sinn, da eine Entscheidung: Sie wollen in der Lage sein, dynamisch auszuführen, und ändern Sie Ihren code auf die fliege ohne kompilieren, aber Sie wollen auch in der Lage sein, es zu optimieren, wo es möglich ist.
Python nicht führen, wie es liest.
def
ist eine Anweisung. Diedef my_function(): ...
block wird ausgeführt, wenn Python trifft es. Das Ergebnis dieser Ausführung ist zu erstellen ein Objekt, das den code der Funktion und weisen Sie ihm den Namenmy_function
.InformationsquelleAutor Ned Batchelder
myFunction ist eine variable, nicht den Wert, so dass Sie können nicht verwenden Sie es als Standard-parameter.
Vielleicht könnten Sie eine lambda-Funktion als Standard-parameter anstelle von den Namen der deklarierten Funktion.
-1: natürlich sind Sie falsch (hier: "_...ist eine variable, nicht den Wert, so dass Sie können nicht verwenden Sie es als Standard-parameter..."). Sie können alles verwenden, was Sie mögen, wie ein Standard-argument, aber es (die Zuordnung dieser zu den Standard-argument) bewertet, wenn die Funktion (der mit den erwähnten Standard-argument) definiert werden.
InformationsquelleAutor nickgroenke