Représenter et formater des valeurs
format() : contrôler la présentation
format() renvoie une chaîne selon une spécification de format, également utilisée dans les chaînes formatées.
price = 1234.5
print(format(price, ".2f")) # 1234.50
print(format(42, "06d")) # 000042
print(format(0.25, ".0%")) # 25%
print(f"{price:.2f}") # 1234.50
Equivalent en C#
double price = 1234.5;
Console.WriteLine(price.ToString("F2", CultureInfo.InvariantCulture)); // 1234.50
Console.WriteLine(42.ToString("D6")); // 000042
Console.WriteLine($"{price:F2}");
Les formats Python et .NET ont des syntaxes différentes : .2f devient par exemple F2. La culture peut modifier séparateurs, symboles et espaces en .NET. Pour un format stable destiné à un échange, spécifions la culture.
repr() : obtenir une représentation de diagnostic
repr() vise une représentation utile pour examiner un objet. Pour certains types, elle ressemble à une expression permettant de recréer sa valeur, sans que cela soit une garantie générale.
Contrairement à l'affichage direct de la chaîne, le saut de ligne est rendu visible sous forme d'échappement.
Equivalent en C#
string text = "Bonjour\nPython";
string diagnostic = System.Text.Json.JsonSerializer.Serialize(text);
Console.WriteLine(diagnostic); // "Bonjour\nPython"
Il n’existe pas de repr() général en C#. Sérialiser une chaîne en JSON rend certains caractères visibles, mais ne reproduit pas la représentation Python d’un objet arbitraire. Un ToString() personnalisé peut fournir un diagnostic adapté au type.
ascii() : échapper les caractères non ASCII
ascii() fonctionne comme repr(), mais échappe les caractères qui ne font pas partie d'ASCII.
Elle ne supprime pas les accents : elle les représente autrement.
Equivalent en C#
string text = "été";
string escaped = System.Text.Json.JsonSerializer.Serialize(text);
Console.WriteLine(escaped); // Représentation JSON avec échappements Unicode
Le sérialiseur JSON par défaut échappe les caractères non ASCII, avec des règles différentes de ascii(), qui produit une représentation Python. Ce code illustre un besoin de diagnostic ; ce n’est pas une conversion syntaxiquement identique.
bin() : représenter un entier en binaire
Le résultat est une chaîne préfixée par 0b.
Equivalent en C#
Pour un entier positif, Convert.ToString(value, 2) fournit les chiffres binaires. Pour un entier négatif de taille fixe, .NET utilise une représentation en complément à deux ; Python produit par exemple -0b1010 pour bin(-10).
oct() : représenter un entier en octal
Le résultat est une chaîne préfixée par 0o.
Equivalent en C#
Le préfixe doit être ajouté si nous souhaitons reproduire le texte Python. Les différences de représentation des entiers négatifs s’appliquent aussi à l’octal.
hex() : représenter un entier en hexadécimal
Le résultat est une chaîne préfixée par 0x. Ces trois conversions ne changent pas la valeur numérique de l'entier d'origine.
Equivalent en C#
Le format x produit des chiffres hexadécimaux minuscules ; X utilise des majuscules. Les valeurs négatives de taille fixe ne sont pas représentées comme les entiers Python.
chr() : obtenir un caractère Unicode
chr() renvoie le caractère correspondant à un point de code Unicode compris entre 0 et 0x10FFFF.
Equivalent en C#
Console.WriteLine(char.ConvertFromUtf32(65)); // A
Console.WriteLine(char.ConvertFromUtf32(0x1F600)); // 😀
Un char C# représente une unité UTF-16, pas nécessairement un point de code complet. ConvertFromUtf32() renvoie donc une chaîne. Elle rejette les points de code de substitution, alors que chr() peut construire une chaîne contenant un tel point de code.
ord() : obtenir un point de code Unicode
ord() réalise l'opération inverse sur une chaîne d'un seul caractère. Elle accepte également un objet bytes ou bytearray de longueur un.
Equivalent en C#
Console.WriteLine(char.ConvertToUtf32("A", 0)); // 65
Console.WriteLine(char.ConvertToUtf32("€", 0)); // 8364
Console.WriteLine(char.ConvertToUtf32("😀", 0)); // 128512
ConvertToUtf32() tient compte des paires de substitution valides. Le cast (int)text[0] ne donne pas le point de code complet d’un caractère hors du plan multilingue de base.