تقنية

defaultdict في بايثون: لماذا لا تنشئ get المفتاح؟

d=defaultdict(int): get لمفتاح r المفقود تعطي None؛ الأقواس تعطي 0 وتخزن المفتاح.
get أولًا، ثم الأقواس.

get لا تستدعي default_factory؛ عند غياب المفتاح تعيد None افتراضيًا. [1]

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

القراءة بالأقواس تختلف عن get في التعامل مع المفتاح المفقود. [1]

  • القراءة بالأقواس تستدعي default_factory المتاحة، ثم تخزن قيمة المفتاح المفقود وتعيدها. [1]
  • get لا تستدعي __missing__، لذلك لا تنشئ قيمة عبر default_factory. [1]
  • مثال مؤلف شُغّل على CPython 3.12.14 مع from collections import defaultdict؛ d=defaultdict(int): d.get("r") تعطي None، ويبقى القاموس فارغًا. [1]
  • بعد ذلك d["r"] تعطي 0 وتخزن r بقيمة 0؛ int دون وسيط تعطي صفرًا. [1]
  • بعدها d.get("r") تعطي 0 لوجود المفتاح؛ المثال متسلسل. [1]

إنشاء القيمة

القراءة بالأقواس تستدعي default_factory المتاحة، ثم تخزن قيمة المفتاح المفقود وتعيدها. [1]

قراءة دون إنشاء

get لا تستدعي __missing__، لذلك لا تنشئ قيمة عبر default_factory. [1]

نبدأ بقاموس فارغ

مثال مؤلف شُغّل على CPython 3.12.14 مع from collections import defaultdict؛ d=defaultdict(int): d.get("r") تعطي None، ويبقى القاموس فارغًا. [1]

d.get("r") -> None [1]

بعد get يبقى القاموس فارغًا؛ بعد الأقواس يخزن r بقيمة صفر، ثم تعطي get صفرًا.
القاموس نفسه، بالترتيب.

قراءة بالأقواس

بعد ذلك d["r"] تعطي 0 وتخزن r بقيمة 0؛ int دون وسيط تعطي صفرًا. [1]

d["r"] -> 0 [1]

بعدها d.get("r") تعطي 0 لوجود المفتاح؛ المثال متسلسل. [1]

المراجع

  1. Python — defaultdict في 3.12

للتوسع: الصفر والقيم المفقودة.

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