تكرار السؤال: …
الإجابة المختصرة
يمكن إسناد الدالة لمتغير، وتمريرها كمعامل، وإرجاعها من دالة أخرى، وتخزينها في هياكل البيانات مثل أي كائن آخر.
الشرح
هذه الخاصية أساس الـ callbacks والـ higher-order functions مثل sorted(key=...) و map، وأساس الـ decorators. تفيد أيضًا في استبدال سلاسل if/elif الطويلة بقاموس يربط المفتاح بالدالة المناسبة (dispatch table). عرّف عقد الـ callback بوضوح (المعاملات والقيمة المعادة والأخطاء)، ويمكن وصفه بـ Callable من typing.
مثال بالكود
from typing import Callable
def export_csv(rows): ...
def export_json(rows): ...
EXPORTERS: dict[str, Callable[[list], None]] = {
"csv": export_csv,
"json": export_json,
}
def export(rows, fmt: str) -> None:
EXPORTERS[fmt](rows)أخطاء شائعة
- استدعاء الدالة عند تمريرها (callback=handler()) بدل تمرير المرجع (callback=handler).
- بناء سلاسل callbacks متداخلة يصعب تتبع تدفقها وأخطائها.