Guide pour les développeurs C#

Python pour les développeurs C# : apprends Python à partir de ce que tu sais déjà

Tu connais déjà C# ? Découvre comment les concepts de programmation que tu maîtrises se traduisent en Python, ce qui fonctionne différemment et le chemin le plus rapide pour devenir productif.

C# et Python, côte à côte

Chaque paire ci-dessous fait le même travail. Pars du code que tu connais, puis vois comment Python l'exprime.

Typage statique et typage dynamique

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}"

En C#, le compilateur rejette count = "three". En Python, un nom peut être relié à n'importe quelle valeur, et les types ne sont vérifiés qu'à l'exécution de la ligne. Les annotations comme name: str sont lues par des outils tels que mypy, jamais imposées à l'exécution.

Classes et propriétés

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 utilise un simple attribut là où C# utilise une propriété automatique, et tu peux passer à @property plus tard sans changer les appelants. Il n'y a pas de private set ; un tiret bas initial, comme dans _balance, indique par convention qu'un élément est interne.

LINQ, compréhensions et générateurs

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)

Une compréhension de liste construit toute la liste d'un coup, comme ToList(). Une expression génératrice entre parenthèses est paresseuse, mais ne peut être consommée qu'une fois, contrairement à une requête LINQ que tu peux ré-énumérer. Ce n'est pas du un-pour-un : pour GroupBy ou OrderBy, tu utiliseras des dictionnaires et 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))

Les deux utilisent async et await, mais une coroutine Python ne fait rien tant qu'elle n'est pas attendue ou planifiée, par exemple avec asyncio.run(...), alors qu'une Task C# démarre dès sa création. asyncio est mono-thread : il convient à l'attente d'E/S, pas aux calculs lourds.

Ce que les développeurs C# doivent désapprendre

Quelques habitudes se transposent mal. Ces changements comptent le plus.

  • L'indentation, c'est la syntaxe

    Les blocs commencent par deux-points et se définissent par l'indentation, pas par des accolades. Utilise quatre espaces et reste cohérent.

  • Les types sont vérifiés à l'exécution

    Le typage dynamique signifie qu'un nom peut référencer n'importe quelle valeur, et les erreurs de type apparaissent quand la ligne s'exécute. Des annotations de type facultatives et un vérificateur comme mypy te rendent une partie de la sécurité de C#.

  • Les compréhensions remplacent la plupart des requêtes LINQ

    Une compréhension comme [p.name for p in people if p.active] remplace les chaînes Where et Select courantes en une seule ligne lisible.

  • Appuie-toi sur les collections intégrées

    Listes, dictionnaires, ensembles et tuples couvrent l'essentiel de ce que tu utilises dans System.Collections.Generic. Utilise in pour tester l'appartenance et len(items) au lieu d'une propriété Count.

  • Écris du Python, pas du C# en Python

    Oublie les getters, les setters et les classes à une seule méthode. Utilise with là où tu utiliserais using, et écris les noms en snake_case plutôt qu'en PascalCase.

Ta feuille de route de C# vers Python

  1. Traduire les concepts familiers

    Associe la syntaxe et les concepts familiers à Python.

  2. Apprendre les différences de Python

    Collections, fonctions, style idiomatique.

  3. S'entraîner sur du vrai code

    Résous de petits problèmes, ne fais pas que lire.

  4. Gagner en confiance

    Des défis plus réalistes et plus difficiles.

Le parcours Python pour les développeurs de Hintor s'adresse aux développeurs qui changent de langage, avec des exercices pratiques intégrés aux leçons. Découvrir le parcours Python pour les développeurs

Mini-défi

À partir d'une liste d'entiers, écris du code Python qui crée une nouvelle liste contenant uniquement les carrés des nombres pairs.

Entrée
[1, 2, 3, 4, 5, 6]
Sortie attendue
[4, 16, 36]

Indice : une compréhension de liste peut inclure un filtre if, et n % 2 == 0 teste si n est pair.

Prêt à transformer tes connaissances C# en compétences Python ?

Tu sais déjà programmer. Apprends maintenant à penser en Python avec des leçons guidées et de la pratique concrète.

Commencer à apprendre Python sur Hintor
Python pour les développeurs C# | Apprends Python plus vite – Hintor