Seite 1 von 1

Re: Funktionsrückgabe abhängig vom Aufruf

Verfasst: Donnerstag 5. Februar 2015, 16:02
von Hyperion
@schneitzmaster: Wobei Klassen an sich kein Allheilmittel sind! Es kommt eben immer auf den Kontext an. Also blos nicht einfach *alles* in eine Klasse flantschen und denken, dass das gut ist ;-)

Re: Funktionsrückgabe abhängig vom Aufruf

Verfasst: Freitag 6. Februar 2015, 09:22
von bwbg
Die drei Ausdrücke für die Werte c, d, e könnte man wiederrum als Funktionen definieren. Immerhin gelten sie für sich eigenständig und können als solche getestet werden:

Code: Alles auswählen

def func_c(a, b):
    return a * b
    
def func_d(a, b):
    return a + b
    
def func_e(a, b):
    return a - b

Code: Alles auswählen

>>> func_c(2, 3) == 6 # Expected: True
True
>>> func_d(2, 3) == 5 # Expected: True
True
>>> func_e(2, 3) == -1 # Expected: True
True
Funktionen sind ebenfalls Objekte und können z. B. wie andere Werte in Listen organisiert werden, über welche dann iteriert werden kann:

Code: Alles auswählen

>>> for f in [func_c, func_d, func_e]:
...     print(f(2, 3))
...
6
5
-1
Ein tolles Werkzeug sind List-Comprehensions. Mit diesen tat ich mich am Anfang recht schwer, aber wenn man sie einmal verinnerlicht hat, will man sie nicht mehr missen:

Code: Alles auswählen

>>> [f(2, 3) for f in [func_c, func_d, func_e]]
[6, 5, -1]
Aber hier kommt es auch, wie bei Klassen, auf den Kontext und das Problem an. Probleme sollten so weit wie möglich auf Teilprobleme heruntergebrochen werden, welche sich isoliert testen lassen (zum Beispiel in der Python-Konsole).

Re: Funktionsrückgabe abhängig vom Aufruf

Verfasst: Freitag 6. Februar 2015, 13:50
von snafu
Wobei ich einen Einzeiler meistens eher ausschreiben würde anstatt ihn in eine Funktion zu kapseln. Einzeiler als Funktionen sind nur dann wirklich sinnvoll, wenn man sie mehrfach im Code einsetzen möchte, quasi ähnlich wie ein Makro. Oder wenn man irgendwelche freakigen Schreibweisen für ein Framework anbieten will, wie man das ja mitunter vorfindet.