Types supplémentaires de Python 3.15
La version 3.15 de Python ajoute les deux types suivants. Les exemples de cette section ne fonctionnent pas avec les versions antérieures.
frozendict() : construire un dictionnaire immuable
frozendict() permet de construire un dictionnaire dont les associations ne peuvent plus être modifiées après la création.
Equivalent en C#
var settings = new Dictionary<string, object>
{
["environment"] = "production",
["retries"] = 3
}.ToFrozenDictionary();
Console.WriteLine(settings["retries"]); // 3
Le type FrozenDictionary<TKey, TValue> (à partir de .NET 8+) fournit un dictionnaire figé optimisé pour la lecture. Le type ImmutableDictionary<TKey, TValue> répond aussi au besoin d’immuabilité. Le gel des associations ne rend pas immuables les objets référencés.
sentinel() : construire une valeur sentinelle
sentinel() permet de nommer un objet distinct utilisé pour représenter un état particulier, par exemple l'absence d'un argument lorsque None reste une valeur valide.
MISSING = sentinel("MISSING")
def describe(value=MISSING):
if value is MISSING:
return "Argument absent"
return f"Valeur reçue : {value}"
print(describe()) # Argument absent
print(describe(None)) # Valeur reçue : None
La comparaison évalue l'identité avec l'opérateur is.
Equivalent en C#
object missing = new object();
string Describe(object? value) => ReferenceEquals(value, missing)
? "Argument absent"
: $"Valeur reçue : {value ?? "null"}";
Console.WriteLine(Describe(missing)); // Argument absent
Console.WriteLine(Describe(null)); // Valeur reçue : null
C# n’a pas de constructeur natif de sentinelle nommée équivalent. new object() suffit pour une comparaison d’identité. Dans cet exemple, le marqueur est passé de manière explicite : une nouvelle instance de type object ne peut pas servir directement de valeur de paramètre optionnel C#. Des surcharges prennent en charge la distinction entre l'absence d'argument et la valeur null.