Seite 1 von 1

Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 18:23
von 01detlef
Hallo zusammen,

ich möchte eine Funktion in einer anderen Funktion aufrufen. Macht sowas Sinn oder gibt es Wege sowas zu vermeiden? Ich habe eine Funktion die Arrays abspeichert. Diese Funktion soll in einer anderen Funktion aufgerufen werden, in der die Arrays berechnet werden.

detlef

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 18:51
von EyDu
Natürlich macht das Sinn und du willst es gar nicht vermeiden. Der Sinn von Funktionen liegt gerade darin, dass Anweisungen gekapselt (und wiederverwendet) werden können. Da ist es nur natürlich, dass in Funktionen andere Funktionen aufgerufen werden, welche weitere Funktionen aufrufen, welche dann ... Du siehst wohin das führt. Manchmal ist es sogar sinnvoll, eine Funktion sich selbst aufrufen zu lassen (Rekursion).

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 19:06
von 01detlef
Hallo,

also mit Funktionen und Parametern habe ich schon gearbeitet, aber wie mache ich das dann mit einer Funktion als Parameter?

Code: Alles auswählen

def Funktion1 (x,y)
             ...
             return erg

def Funktion2(a,b,Funktion1(x,y))
     ....
     return erg2
oder wie?

detlef

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 19:11
von EyDu

Code: Alles auswählen

def create_and_save(a, b, filename):
    m = create(a, b)
    save(m, filename)

def create(a, b):
    return a*b

def save(m, filename):
    with open(filename, "w") as fp:
        m.save(fp)

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 19:26
von 01detlef
Hallo,

also das Beispiel verstehe ich nicht. Muss die Funktion, die in einer anderen aufgerufen werden soll, nicht als Parameter eingeladen werden?

Code: Alles auswählen

def Write(data):
  ....

def Berechnung(a,b,Write(data))
  for i in range():
      matrix[i] = ...
      write(matrix[i])
Irgendwie so?

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 19:35
von yipyip
Nein so nicht, damit uebergibst du den Return-Wert beim Aufruf von 'Write'.
Du willst (Funktionen klein schreiben!):

Code: Alles auswählen

def write(data):
  ....

def berechnung(a, b, write)
  for i in range():
      matrix[i] = ...
      write(matrix[i])
:wink:
yipyip

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 19:42
von EyDu
Es stellt sich allerdings die Frage, warum du die write-Funktion in disem Fall als Parameter übergeben möchtest. Auf den ersten Blick scheint das in diesem Szenario nicht besonders sinnvoll zu sein. Bereits das Vorhaben, dass die Funktion zur Berechnung etwas in eine Datei schreibt, schreit nach einem Fehler. Die Berechnung und das Speichern sollten vollständig getrennt sein.

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 19:55
von BlackJack
@EyDu: Ist es doch auch. Das übergebene `write()` kann ja sonstwas mit dem Ergebnis anstellen.

Wobei ich das in Python auch nicht so machen würde. Das ist was für den „continuation style” in JavaScript & Co, aber in Python eher ungewöhnlich.

Re: Funktion in Funktion aufrufen

Verfasst: Donnerstag 1. November 2012, 20:09
von yipyip
Kleiner Nachtrag:
Write(data) ergibt zwar irgendeinen Return-Wert aber

Code: Alles auswählen

def Berechnung(a,b,Write(data)):
...
schon einen Syntaxfehler.
:wink:
yipyip

Re: Funktion in Funktion aufrufen

Verfasst: Freitag 2. November 2012, 20:14
von EyDu
Die Funktionen an sich sind klar getrennt, aber ich bezweifele es, dass das Speichern in der Berechnung sinnvoll ist. Dass man Funktionen übergibt kommt natürlich häufig, aber lediglich zur Modifikation der Berechnung und nicht, um noch nebenher irgendwo Aufgaben zu erledigen.