تقنية

starmap في بايثون: هل تمرر الزوج وسيطًا واحدًا؟

starmap: الزوج (2,5) يعطي 7.
وسيطان.

starmap تفك عناصر الزوج إلى وسيطين لدالتنا؛ map بمدخل واحد تمرر الزوج نفسه. [1]

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

لا؛ تفك الزوج إلى وسيطين هنا. [1]

  • starmap تفك عناصر الزوج إلى وسيطين لدالتنا؛ map بمدخل واحد تمرر الزوج نفسه. [1]
  • على CPython 3.12.14، combine(x,y) تجمع العددين وتسجل الاستدعاء؛ pairs تساوي [(2,5),(8,11)]. [1]
  • list(starmap(combine,pairs)) تعطي [7,19]؛ السجل [(2,5),(8,11)]، مثل استدعاء الدالة بعنصري كل زوج. [1]
  • list(map(combine,pairs)) ترفع TypeError قبل دخول دالتنا، لغياب الوسيط الثاني؛ السجل فارغ. [1]
  • تحكم بمدخلين: list(map(combine,[2,8],[5,11])) تعطي [7,19]. نفرغ السجل قبل المقارنة؛ شكل المدخل يحدد طريقة تمريره. [1]

الزوج والوسيط

starmap تفك عناصر الزوج إلى وسيطين لدالتنا؛ map بمدخل واحد تمرر الزوج نفسه. [1]

دالتنا والمدخل

على CPython 3.12.14، combine(x,y) تجمع العددين وتسجل الاستدعاء؛ pairs تساوي [(2,5),(8,11)]. [1]

تفكيك الأزواج

list(starmap(combine,pairs)) تعطي [7,19]؛ السجل [(2,5),(8,11)]، مثل استدعاء الدالة بعنصري كل زوج. [1]

from itertools import starmap calls=[] def combine(x,y): calls.append((x,y)) return x+y pairs=[(2,5),(8,11)] print(list(starmap(combine,pairs)),calls) [1]

map بمدخلين تعطي [7,19].
مدخلان.

المقارنة والتحكم

list(map(combine,pairs)) ترفع TypeError قبل دخول دالتنا، لغياب الوسيط الثاني؛ السجل فارغ. [1]

calls.clear() try: list(map(combine,pairs)) except TypeError: print("TypeError",calls) print(list(map(combine,[2,8],[5,11]))) [1]

تحكم بمدخلين: list(map(combine,[2,8],[5,11])) تعطي [7,19]. نفرغ السجل قبل المقارنة؛ شكل المدخل يحدد طريقة تمريره. [1]

المراجع

  1. Python starmap

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

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