تكرار السؤال: …
الإجابة المختصرة
تنشئ callable جديدًا يثبّت بعض معاملات دالة موجودة مسبقًا، مما يفيد عند تمرير callback يحتاج سياقًا ثابتًا.
الشرح
partial بديل أوضح من lambda عندما تريد فقط تثبيت بعض المعاملات، كما أنها قابلة للـ pickle إذا كانت الدالة الأصلية كذلك (على عكس lambda)، وهذا مهم عند إرسال المهام إلى ProcessPoolExecutor. يمكن فحص الدالة والمعاملات المثبتة عبر func و args و keywords. لا تستخدمها لبناء طبقات تجريد تخفي اعتماديات مهمة عن القارئ.
مثال بالكود
from functools import partial
from concurrent.futures import ProcessPoolExecutor
def resize(path: str, width: int, quality: int) -> str: ...
thumbnail = partial(resize, width=200, quality=80)
with ProcessPoolExecutor() as pool:
results = list(pool.map(thumbnail, paths))أخطاء شائعة
- تمرير lambda إلى ProcessPoolExecutor ثم الحصول على خطأ PicklingError.
- تثبيت معاملات موضعية بترتيب خاطئ بدل استخدام المعاملات المسماة.