Funktion in Funktion aufrufen

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
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Donnerstag 1. November 2012, 18:23

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
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Donnerstag 1. November 2012, 18:51

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).
Das Leben ist wie ein Tennisball.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Donnerstag 1. November 2012, 19:06

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
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Donnerstag 1. November 2012, 19:11

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)
Das Leben ist wie ein Tennisball.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Donnerstag 1. November 2012, 19:26

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?
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Donnerstag 1. November 2012, 19:35

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
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Donnerstag 1. November 2012, 19:42

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.
Das Leben ist wie ein Tennisball.
BlackJack

Donnerstag 1. November 2012, 19:55

@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.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Donnerstag 1. November 2012, 20:09

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
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Freitag 2. November 2012, 20:14

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.
Das Leben ist wie ein Tennisball.
Antworten