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
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}"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
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 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
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)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
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))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
mypyte 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înesWhereetSelectcourantes 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. Utiliseinpour tester l'appartenance etlen(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
withlà où tu utiliseraisusing, et écris les noms ensnake_caseplutôt qu'enPascalCase.
Ta feuille de route de C# vers Python
Traduire les concepts familiers
Associe la syntaxe et les concepts familiers à Python.
Apprendre les différences de Python
Collections, fonctions, style idiomatique.
S'entraîner sur du vrai code
Résous de petits problèmes, ne fais pas que lire.
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.
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]La compréhension se lit de gauche à droite : calculer n * n pour chaque n de numbers, en ne gardant que les nombres pairs. Une boucle for classique avec append fonctionne aussi ; la compréhension est le raccourci idiomatique.
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