Bauer hat geschrieben:
2. Switch-case: Darauf wurde bewusst verzichtet. Ob das sinnvoll ist oder nicht, sei dahingestellt
def foo():
# do something
def bar():
# do something different
callbacks = {'foo': foo, 'bar': bar}
user_input = raw_input('Gimme something: ')
try:
callbacks[user_input]()
except KeyError:
print 'Invalid input'
Das wäre ein Python-Äquivalent zu Switch-Anweisungen anderer Sprachen. Je nach Situation kann man das auch anders lösen. Generell ist Switch in Python ziemlich überflüssig, weil es genau genommen nicht mehr als ein Dictionary ist, aus dem basierend auf einem Wert ein Code-Block zur Ausführung herausgesucht wird.
Switch ist in vielen anderen Sprachen nur deswegen verfügbar, weil sie entweder keine eingebauten Dictionary-Typen haben oder weil dort Funktionen bzw. Methoden keine first-class Objekte sind (wie z.B. in Java).
Ich habe lange Java und C# programmiert, die Switch-Anweisung dort so gut wie nie angewendet, und sie unter Python auch nie vermisst. switch ist eigentlich nie wirklich nötig.
@patlkli
Es gibt nicht "C/C++", es gibt nur C und C++ (eine völlig andere Sprache, die zu C auch nur teilweise kompatibel ist). Ob man rechtmäßig behaupten kann, dass Python besser als C++ ist, sei mal dahingestellt, besser als C ist es auf alle Fälle. C genügt den Anforderungen moderner Programmierung nicht mehr wirklich. C ist nur dann sinnvoll, wenn man keine andere Wahl hat.
@OP
Stellst du die Wahl zwischen C und Python, dann sage ich Python, denn C ist für viele heutige Aufgaben nicht mehr wirklich geeignet. Besonders die fehlende Objekt-Orientierung sowie der direkte Speicherzugriff ohne Komfortfunktionen machen sich bei größeren Anwendungen bemerkbar. Jeder, der schon einem GLib-Code gesehen hat, weiß, was ich meine 😉 C kann man immer noch lernen, wenn man es wirklich nötig braucht, z.B. um performance-kritischen Python-Code auszulagern oder tatsächlich ein Kernel-Treiber zu schreiben. Bis dahin kann man C getrost außen vorlassen.
Man braucht C auch nicht wirklich, um Grundlagen zu lernen. Zum einen ergeben sich aufgrund des Objektmodells moderner Hochsprachen völlig neue Möglichkeiten zur Ablaufsteuerung (Reflection, Ereignisse, etc.), die in C so nicht existieren, zum anderen bieten heutige Sprachen für viele Sprach-Statements wie Schleifen Laufzeitunterstützung. So kennt Python die __iter__ Methode, und Java die Iterable-Schnittstelle für erweiterte For-Schleifen, die ohne expliziten Zähler auskommen. Eine der Sünden in Python, die ihren Ursprung wohl in C Kenntnissen haben, ist nämlich sowas:
items = ['foo', 'bar', 'baz']
for i in range(len(items)):
print items[i]
Dabei sind Listen in Python "iterable", können also in for-Schleifen direkt verwendet werden:
for item in items:
print item
Vor diesem Hintergrund sehe ich keinen Grund, warum das Erlernen von C sinnvoll sein könnte.