Funktionsrückgabe abhängig vom Aufruf

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
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@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 ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

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).
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Antworten