تقنية

format_map في بايثون: لماذا تختلف عن format(**d)؟

الخريطة Fallback تعطي البديل؛ ناتج التنسيق R:?.
الخريطة مباشرة.

format_map تستعمل الخريطة مباشرة، بدل نسخها إلى dict. [1]

الخلاصة السريعة

التوسيع **d يفقد بديل __missing__ في المثال؛ التنسيق المباشر يحفظه. [1]

  • format_map تستعمل الخريطة مباشرة، بدل نسخها إلى dict. [1]
  • الفائدة تظهر مع صنف فرعي من dict يعرّف __missing__؛ قاموس عادي لا يملك بديلنا. [1]
  • مثال مؤلف على CPython 3.12.14: f="{name}:{missing}" وd=Fallback(name="R")؛ الصنف أدناه يعيد "?" عند غياب مفتاح. [1]
  • f.format_map(d) تعطي "R:?"؛ f.format(**d) ترفع KeyError للمفتاح missing. [1]
  • تحكم: f.format_map(dict(d)) ترفع KeyError أيضًا؛ بقي محتوى d مساويًا {"name":"R"}. [1]

الخريطة مباشرة

format_map تستعمل الخريطة مباشرة، بدل نسخها إلى dict. [1]

بديل المفتاح

الفائدة تظهر مع صنف فرعي من dict يعرّف __missing__؛ قاموس عادي لا يملك بديلنا. [1]

الصنف والمثال

مثال مؤلف على CPython 3.12.14: f="{name}:{missing}" وd=Fallback(name="R")؛ الصنف أدناه يعيد "?" عند غياب مفتاح. [1]

class Fallback(dict): def __missing__(self,key): return "?" f="{name}:{missing}" d=Fallback(name="R") [1]

توسيع d أو نسخها إلى dict يؤديان إلى KeyError هنا.
نسخ المحتوى.

النتيجة والتحكم

f.format_map(d) تعطي "R:?"؛ f.format(**d) ترفع KeyError للمفتاح missing. [1]

f.format(**d) -> KeyError [1]

تحكم: f.format_map(dict(d)) ترفع KeyError أيضًا؛ بقي محتوى d مساويًا {"name":"R"}. [1]

المراجع

  1. Python — format_map

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.