Leitfaden für C#-Entwickler
Python für C#-Entwickler: Lerne Python mit dem, was du schon weißt
Du kennst schon C#? Entdecke, wie sich vertraute Programmierkonzepte in Python übersetzen, was anders funktioniert und wie du am schnellsten produktiv wirst.
C# und Python im direkten Vergleich
Jedes Paar unten erledigt dieselbe Aufgabe. Starte mit dem Code, den du kennst, und sieh dann, wie Python ihn ausdrückt.
Statische und dynamische Typisierung
int count = 3;
count = "three"; // compile error
string Greet(string name) => $"Hi {name}";count = 3
count = "three" # allowed
def greet(name: str) -> str:
return f"Hi {name}"In C# lehnt der Compiler count = "three" ab. In Python kann ein Name an jeden Wert neu gebunden werden, und Typen werden erst geprüft, wenn die Zeile ausgeführt wird. Typannotationen wie name: str lesen Tools wie mypy; zur Laufzeit werden sie nie erzwungen.
Klassen und Properties
public class Account
{
public decimal Balance { get; private set; }
public void Deposit(decimal amount) => Balance += amount;
}class Account:
def __init__(self):
self.balance = 0
def deposit(self, amount):
self.balance += amountPython nutzt ein einfaches Attribut, wo C# eine Auto-Property verwendet, und du kannst später auf @property umstellen, ohne die Aufrufer zu ändern. Es gibt kein private set; ein führender Unterstrich wie in _balance kennzeichnet per Konvention etwas Internes.
LINQ, Comprehensions und Generatoren
var names = people
.Where(p => p.Active)
.Select(p => p.Name)
.ToList();names = [p.name for p in people if p.active]
# lazy: nothing runs until you iterate it
active = (p for p in people if p.active)Eine List Comprehension baut die ganze Liste sofort auf, wie ToList(). Ein Generatorausdruck in Klammern ist lazy, lässt sich aber nur einmal verbrauchen – anders als eine LINQ-Abfrage, die du erneut aufzählen kannst. Das ist keine Eins-zu-eins-Entsprechung: Für GroupBy oder OrderBy nutzt du Dictionaries und sorted.
async/await
async Task<string[]> FetchAllAsync(IEnumerable<string> urls)
{
return await Task.WhenAll(urls.Select(FetchAsync));
}import asyncio
async def fetch_all(urls):
return await asyncio.gather(*(fetch(url) for url in urls))Beide nutzen async und await, aber eine Python-Coroutine tut nichts, bis sie awaited oder eingeplant wird, etwa mit asyncio.run(...), während ein C#-Task sofort nach der Erzeugung losläuft. asyncio ist single-threaded und eignet sich daher fürs Warten auf I/O, nicht für rechenintensive Arbeit.
Was C#-Entwickler umlernen müssen
Einige Gewohnheiten lassen sich schlecht übertragen. Diese Umstellungen zählen am meisten.
Einrückung ist die Syntax
Blöcke beginnen mit einem Doppelpunkt und werden durch Einrückung statt durch geschweifte Klammern festgelegt. Nutze vier Leerzeichen und bleibe konsequent.
Typen werden zur Laufzeit geprüft
Dynamische Typisierung bedeutet: Ein Name kann auf jeden Wert verweisen, und Typfehler zeigen sich erst, wenn die Zeile ausgeführt wird. Optionale Typannotationen und ein Prüfer wie
mypybringen einen Teil der C#-Sicherheit zurück.Comprehensions ersetzen das meiste LINQ
Eine Comprehension wie
[p.name for p in people if p.active]ersetzt die üblichenWhere- undSelect-Ketten in einer lesbaren Zeile.Setze auf eingebaute Sammlungen
Listen, Dictionaries, Sets und Tupel decken das meiste ab, wonach du in
System.Collections.Genericgreifst. Mitinprüfst du die Zugehörigkeit, undlen(items)ersetzt eineCount-Eigenschaft.Schreibe Python, nicht C# in Python
Verzichte auf Getter, Setter und Klassen mit nur einer Methode. Nutze
with, wo duusingverwenden würdest, und schreibe Namen insnake_casestatt inPascalCase.
Dein Fahrplan von C# zu Python
Vertraute Konzepte übersetzen
Ordne vertraute Syntax und Konzepte Python zu.
Die Besonderheiten von Python lernen
Sammlungen, Funktionen, idiomatischer Stil.
Mit echtem Code üben
Löse kleine Aufgaben, statt nur zu lesen.
Sicherheit aufbauen
Schwierigere, realistischere Aufgaben.
Der Lernpfad „Python für Entwickler“ von Hintor richtet sich an Entwickler, die die Sprache wechseln, und enthält praktische Übungen direkt in den Lektionen. Lernpfad „Python für Entwickler“ ansehen
Mini-Aufgabe
Schreibe Python-Code, der aus einer Liste von Ganzzahlen eine neue Liste erzeugt, die nur die Quadrate der geraden Zahlen enthält.
- Eingabe
- [1, 2, 3, 4, 5, 6]
- Erwartete Ausgabe
- [4, 16, 36]
Tipp: Eine List Comprehension kann einen if-Filter enthalten, und n % 2 == 0 prüft, ob n gerade ist.
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [n * n for n in numbers if n % 2 == 0]
print(even_squares) # [4, 16, 36]Die Comprehension liest sich von links nach rechts: n * n für jedes n in numbers berechnen und nur die geraden behalten. Eine normale for-Schleife mit append funktioniert ebenfalls; die Comprehension ist die idiomatische Kurzform.
Bereit, dein C#-Wissen in Python-Können zu verwandeln?
Du weißt bereits, wie man programmiert. Jetzt lernst du mit geführten Lektionen und praktischen Übungen, in Python zu denken.
Jetzt Python bei Hintor lernen