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

C#
int count = 3;
count = "three";   // compile error

string Greet(string name) => $"Hi {name}";
Python
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

C#
public class Account
{
    public decimal Balance { get; private set; }

    public void Deposit(decimal amount) => Balance += amount;
}
Python
class Account:
    def __init__(self):
        self.balance = 0

    def deposit(self, amount):
        self.balance += amount

Python 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

C#
var names = people
    .Where(p => p.Active)
    .Select(p => p.Name)
    .ToList();
Python
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

C#
async Task<string[]> FetchAllAsync(IEnumerable<string> urls)
{
    return await Task.WhenAll(urls.Select(FetchAsync));
}
Python
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 mypy bringen 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 üblichen Where- und Select-Ketten in einer lesbaren Zeile.

  • Setze auf eingebaute Sammlungen

    Listen, Dictionaries, Sets und Tupel decken das meiste ab, wonach du in System.Collections.Generic greifst. Mit in prüfst du die Zugehörigkeit, und len(items) ersetzt eine Count-Eigenschaft.

  • Schreibe Python, nicht C# in Python

    Verzichte auf Getter, Setter und Klassen mit nur einer Methode. Nutze with, wo du using verwenden würdest, und schreibe Namen in snake_case statt in PascalCase.

Dein Fahrplan von C# zu Python

  1. Vertraute Konzepte übersetzen

    Ordne vertraute Syntax und Konzepte Python zu.

  2. Die Besonderheiten von Python lernen

    Sammlungen, Funktionen, idiomatischer Stil.

  3. Mit echtem Code üben

    Löse kleine Aufgaben, statt nur zu lesen.

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

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
Python für C#-Entwickler | Python schneller lernen – Hintor