تكرار السؤال: …
الإجابة المختصرة
يسمح unpacking بتوزيع عناصر iterable على عدة أسماء في سطر واحد، والنجمة * تلتقط عددًا متغيرًا من العناصر في list، كما يُستخدم * و ** لفك القيم عند الاستدعاء أو دمج المجموعات.
الشرح
يجعل unpacking حدود البيانات صريحة، مثل تبديل متغيرين a, b = b, a أو قراءة عناصر tuple معادة من دالة. يرمي ValueError إذا لم يطابق عدد العناصر عدد الأسماء، وهذا مفيد لاكتشاف البيانات غير المتوقعة مبكرًا. يمكن استخدام *rest مرة واحدة فقط في الطرف الأيسر، وتكون قيمته list دائمًا حتى لو كانت فارغة. ويُستخدم ** لدمج القواميس.
مثال بالكود
first, *middle, last = [1, 2, 3, 4]
# first=1, middle=[2, 3], last=4
name, (lat, lng) = ("Cairo", (30.0, 31.2))
defaults = {"timeout": 5}
config = {**defaults, "retries": 3}أخطاء شائعة
- فك عناصر dict مباشرة مثل a, b = my_dict والحصول على المفاتيح بدل القيم.
- استخدام unpacking على بيانات ديناميكية الطول دون معالجة ValueError.