def b() in def a() - verschachteln von Methoden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Hallo,

Ich schreibe hier meinen ersten Beitrag und auch gleichzeitig meinen ersten Post. Zu meiner Person ich bin jemand der Google sehr gut benutzen kann und dies auch ständig tut. Kann ich immer schön am Suchprotokl sehen. Aber all zu oft lese ich wenn ich etwas suche nur: "Bitte Suchfunktion verwenden".
Okay das ist geklärt weiter. :-D

Ich habe mich gefragt wie ich Methoden verschachtel kann. Ich möchte nicht über 'class' Diskutieren. Das unten ist ein Beispielcode der in 'a()' noch 'b()' defeniert. Wenn ich in 'a()' 'b()' aufrufe und a() auch wieder aufrufe geht das ohne Probleme.

Code: Alles auswählen

def a():
    def b():
        print "This work"
    b()
a()
Aber kann ich das direkt aufrufen?
a()b() ; a().b() ; a.b()
Geht nicht. Ich finde es auch schwierig einen Begriff dafür zu finden.

Habe nur bei Wikipedia.org genau das gefunden. Siehe http://de.wikipedia.org/wiki/Python_(Pr ... grammieren

Code: Alles auswählen

def add_and_print_maker(x):
    def temp(y):
        print "%d + %d = %d" % (x, y, x+y)
    return temp
PS: ich musste feststellen wie spät es ist also bitte nicht auf die Postzeit gucken :roll:
BlackJack

Sr4l hat geschrieben:

Code: Alles auswählen

def a():
    def b():
        print "This work"
    b()
a()
Aber kann ich das direkt aufrufen?
a()b() ; a().b() ; a.b()
Geht nicht. Ich finde es auch schwierig einen Begriff dafür zu finden.
Nein das geht nicht weil `b` ein lokaler Name in `a()` ist, den es gar nicht gibt solange Du `a()` nicht aufrufst, und der wieder verschwindet wenn `a()` abgearbeitet wurde und zurückkehrt. ``def`` ist in Python eine Anweisung die ausgeführt wird und keine statische Deklaration.

Als Beispiel:

Code: Alles auswählen

def c(x, y):
    result = x * y
    print result
    return result
Hier würde man ja auch nicht erwarten, das man von aussen auf `c.x`, `c.y` oder gar `c.result` zugreifen kann. Das verhält sich bei lokal definierten Funktionen genauso.

Das was Du bei Wikipedia gefunden hast, läuft unter dem Namen "Closure". Die innere Funktion, die beim Aufruf der äusseren erzeugt wurde, wird zurückgegeben und behält dabei Zugriff auf ihre "Umgebung", also auf die lokalen Namen der äusseren Funktion von dem Aufruf in dem sie entstanden ist.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ok danke. Ich wusste das man nicht auf die Variablen x und y in c() zugreifen kann aber ich dachte mir das vielleicht für ein funktion in eriner funktion ne ausnahme gemacht wird.

Vielen Dank dann habe ich das geklärt :-D
Antworten