keboo hat geschrieben:Nun hab ich damit begonnen, den Code zu unterteilen in Funktionen.
Hi Johannes!
Es hat sich bewährt, Funktionen (wenn möglich) so zu programmieren, dass sie eigenständig lauffähig sind. Also, so weit wie möglich, unabhängig von außenstehenden Variablen sind.
Das erleichtert den Programmaufbau, da man Funktion für Funktion einzeln testen kann. Weiters hat man dadurch einzelne, abgeschlossene Bereiche die ihre eigene Logik besitzen und durchschaubar bleiben.
Wenn du in einer Funktion aber davon ausgehen musst, dass eine bestimmte Variable, mit einem bestimmten Namen, irgenwo bereits existiert bevor du die Funktion erfolgreich aufrufen kannst, dann geht diese Abtrennung der Logik 'flöten' und dein Programm wird zunehmend komplizierter.
Besser -- mehrere kleine, überschaubare Teile als ein großes Teil, das in sich verwoben ist.
Deshalb hier meine Tipps für die einfache Verwendung von Funktionen:
- Übergebe **alle** benötigten Variablen als Parameter an die Funktion.
- Verändere bzw. verwende **keine globale Variablen**, da dadurch das Verhalten der Funktion nach außen hin komplizierter wird.
- Gib veränderte Werte/Variablen mit der Anweisung "return" zurück.
- Wenn du mehrere Werte zurück geben möchtest, dann kannst du diese ebenfalls mit **return** zurück geben.
Code: Alles auswählen
def meine_funktion(parameter1, parameter2):
...
return (wert1, wert2, wert3)
(ret1, ret2, ret3) = meine_funktion(argument1, argument2)
print ret1
print ret2
print ret3
Hier ein Beispiel:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
def multipliziere(wert, multi):
"""
Multipliziert den Parameter "wert" mit "mult".
wert
Fließkommazahl, die mit dem Multiplikator multipliziert wird.
multi
Fließkommazahl, mit der der Wert multipliziert wird.
Rückgabe: Fließkommazahl
"""
# Gehe niemals davon aus, dass du auch wirklich den richtigen
# Type übergeben bekommst.
wert = float(wert)
multi = float(multi)
# Berechnen
ergebnis = wert * multi
# Ergebnis zurück geben
return ergebnis
# Wie man sieht, ist die Funktion ein in sich abgeschlossenes Teil.
# Sie erwartet sich keine spezielle Variable und verändert nichts.
#----------------------------------------------------------------------
# Beispiel 1
#----------------------------------------------------------------------
for i in range(1, 11):
# Dieser Aufruf der Funktion, übergibt Werte und zeigt das Ergebnis
# an. Dabei wird von der Funktion selbst, **nichts** verändert.
print multipliziere(i, i)
#----------------------------------------------------------------------
# Beispiel 2
#----------------------------------------------------------------------
print
print
ii = 1
for i in range(1, 11):
# Diese Anweisung verändert die Variable `ii`. Der Vorteil dieser
# Schreibweise ist, dass **jeder** sofort mitbekommt, dass die Variable
# `ii` verändert wird. Die Funktion `multipliziere` bleibt weiterhin
# in sich abgeschlossen. Es wird nichts von der Funktion selbständig
# verändert. Allein die Form des Aufrufes entscheidet (sichtbar), dass
# jetzt ein Wert verändert wird. Das schafft Transparenz und erleichtert
# das Lesen des Codes ungemein.
ii = multipliziere(i, ii)
print ii
lg
Gerold