Présentation
Introduction
Python met à notre disposition des fonctions utilisables sans importer de module. Ces fonctions natives, appelées built-in functions, permettent de convertir des données, de parcourir des collections, d'exécuter des calculs, de manipuler des objets, etc.
Certains éléments présentés dans ce chapitre, tels que int, str et list, sont des types natifs et non des fonctions. Ils s’utilisent toutefois avec une syntaxe d’appel similaire et sont présentés aux côtés des fonctions natives dans la référence officielle.
Les fonctions et les types sont regroupés par cas d’utilisation. Ils sont présentés avec des exemples en Python et accompagnés avec un parallèle en C#.
Concernant les exemples en C#
Chaque bloc de code C# est un exemple indépendant, exécutable dans une application console créée avec C# 14 / .NET 10 ou une version ultérieure.
Selon l’exemple, ajoutons les espaces de noms nécessaires en tête de la classe :
using System;
using System.Collections.Generic;
using System.Collections.Frozen;
using System.Diagnostics;
using System.Dynamic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Numerics;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
Les nombres à virgule flottante utilisent le type double en C#, qui correspond au type float en Python. Pour les montants en euros, les exemples utilisent le type decimal en C# et le type Decimal du module decimal en Python.
Voici d'autres rapprochements :
| Notion Python | Rapprochement C# / .NET | Limites |
|---|---|---|
| Itérable | IEnumerable<T> |
Une nouvelle énumération peut réexécuter le traitement ; certains itérables Python ne peuvent être parcourus qu’une fois. |
| Itérateur | IEnumerator<T> |
En C#, l’avancement avec MoveNext() et la lecture avec Current sont séparés. |
int |
int, long ou BigInteger |
int et long ont une capacité fixe ; BigInteger permet de représenter des entiers de taille arbitraire. |
float |
double |
Le type float de C# utilise une simple précision. |
| Liste | List<T> |
Les éléments doivent être compatibles avec le type T, alors qu’une liste Python peut contenir des éléments de types différents. |
| Tuple | ValueTuple ou Tuple |
Un tuple Python est immuable ; les champs d’un ValueTuple sont modifiables, tandis qu’un Tuple est immuable. |
| Objet dynamique | ExpandoObject |
Permet d’ajouter et de supprimer des membres à l’exécution ; leur accès via dynamic est résolu à l’exécution. |
Concernant les exemples en Pyhton
Un itérable est un objet que nous pouvons parcourir, par exemple une liste, un tuple, une chaîne de caractères ou une séquence d’entiers créée avec range(). Un itérateur fournit successivement des éléments et conserve l’état de son parcours. Une fois épuisé, il ne fournit plus d’éléments : le parcourir à nouveau ne recommence pas le parcours.
Certaines fonctions, comme map() et filter(), renvoient des itérateurs. Les exemples de code utilisent la fonction list() pour rassembler leurs éléments dans une liste et afficher les résultats. Cette opération consomme les éléments restants de l’itérateur.
Dans les signatures officielles, le séparateur / indique que les paramètres qui le précèdent doivent être transmis par position. Le séparateur *, lorsqu’il est utilisé seul, indique que les paramètres qui le suivent doivent être transmis par leur nom. Ces séparateurs font partie de la signature et ne doivent pas être écrits lors de l’appel.
Les exemples de ce chapitre sont conçus pour Python 3.15 ou une version ultérieure. Certains types présentés, comme frozendict, ne sont disponibles qu’à partir de cette version.
Différences à retenir pour un développeur C#
-
Les conversions peuvent appliquer des règles différentes.
int(12.9)en Python supprime la partie décimale et renvoie12, tandis queConvert.ToInt32(12.9)en C# arrondit et renvoie13. Une conversion explicite(int)12.9tronque également vers zéro. -
Python applique des règles de vérité aux objets. Une collection vide, une valeur numérique nulle ou
Nonesont considérés comme faux. En C#, nous écrivons généralement une condition explicite, commenumber != 0ouitems.Count != 0. -
Les itérateurs conservent leur état de parcours.
map(),filter(),zip()etenumerate()renvoient des itérateurs : une fois consommés, ils ne fournissent plus d’éléments. Une requête LINQ peut généralement être parcourue plusieurs fois, si sa source le permet ; chaque parcours peut ré-exécuter le traitement. -
Les paramètres de création d’une séquence diffèrent.
range(start, stop)reçoit une borne de fin exclue, tandis queEnumerable.Range(start, count)reçoit un nombre d’éléments. Ainsi,range(2, 5)etEnumerable.Range(2, 3)produisent tous deux les valeurs2,3et4. -
La division entière diffère pour les résultats négatifs. En Python,
//arrondit le quotient vers moins l’infini :-7 // 3donne-3. En C#, la division entre entiers tronque vers zéro :-7 / 3donne-2. Les restes diffèrent également :-7 % 3donne2en Python et-1en C#. -
L’introspection et la modification des objets ne se transposent pas directement. La réflexion en C# permet d’examiner les types et leurs membres, mais elle ne permet pas d’ajouter des membres à une instance de classe ordinaire.
ExpandoObjectpermet certains comportements dynamiques, comme l’ajout de propriétés à l’exécution. En Python, ces possibilités dépendent également du type de l’objet. -
Des collections aux noms similaires peuvent avoir des règles d’égalité différentes. En Python, deux
frozensetsont égaux s’ils contiennent les mêmes éléments. En C#, pour comparer le contenu de deuxFrozenSet<T>, nous utilisonsSetEquals();==compare leurs références. Une différence similaire existe entrefrozendictetFrozenDictionary<TKey, TValue>: leur contenu ne se compare pas automatiquement de la même façon.
Index alphabétique
| Lettre | Fonctions et types présentés |
|---|---|
| A | abs(), aiter(), all(), anext(), any(), ascii() |
| B | bin(), bool(), breakpoint(), bytearray(), bytes() |
| C | callable(), chr(), classmethod(), compile(), complex() |
| D | delattr(), dict(), dir(), divmod() |
| E | enumerate(), eval(), exec() |
| F | filter(), float(), format(), frozendict() (3.15), frozenset() |
| G | getattr(), globals() |
| H | hasattr(), hash(), help(), hex() |
| I | id(), input(), int(), isinstance(), issubclass(), iter() |
| L | len(), list(), locals() |
| M | map(), max(), memoryview(), min() |
| N | next() |
| O | object(), oct(), open(), ord() |
| P | pow(), print(), property() |
| R | range(), repr(), reversed(), round() |
| S | set(), setattr(), sentinel() (3.15), slice(), sorted(), staticmethod(), str(), sum(), super() |
| T | tuple(), type() |
| V | vars() |
| Z | zip() |
| _ | __import__() |