تقنية

singledispatch في بايثون: هل نداء الدالة المسجلة يختار النوع؟

route_int is route: False.
دالتان مختلفتان.

register تعيد الدالة المسجلة دون تغليفها بالموزع؛ نداؤها مباشرة ينفذها دون اختيار النوع. [1] [2]

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

لا؛ النداء المباشر ينفذ الدالة نفسها. [1] [2]

  • register تعيد الدالة المسجلة دون تغليفها بالموزع؛ نداؤها مباشرة ينفذها دون اختيار النوع. [1] [2]
  • على CPython 3.12.14، route تعيد "base" افتراضيًا؛ route_int المسجلة لـint تعيد "int". [1] [2]
  • route_int is route تعطي False؛ الدالة المسجلة ليست دالة الاختيار نفسها. [1] [2]
  • route_int("bud") تعيد "int"؛ route("bud") تعيد "base". النص نفسه وصل إلى دالتين مختلفتين. [1] [2]
  • تحكم: route(4) تعيد "int". دالتنا المسجلة تعيد ثابتًا دون فحص المدخل؛ لا يعني تسجيل int أنها ترفض النص تلقائيًا. [1] [2]

التسجيل والنداء

register تعيد الدالة المسجلة دون تغليفها بالموزع؛ نداؤها مباشرة ينفذها دون اختيار النوع. [1] [2]

دالتان مؤلفتان

على CPython 3.12.14، route تعيد "base" افتراضيًا؛ route_int المسجلة لـint تعيد "int". [1] [2]

هوية الدالتين

route_int is route تعطي False؛ الدالة المسجلة ليست دالة الاختيار نفسها. [1] [2]

from functools import singledispatch @singledispatch def route(value):return "base" @route.register(int) def route_int(value):return "int" print(route_int is route) [1] [2]

route_int("bud"): int; route("bud"): base.
نداءان مختلفان.

نداء مباشر والتحكم

route_int("bud") تعيد "int"؛ route("bud") تعيد "base". النص نفسه وصل إلى دالتين مختلفتين. [1] [2]

print(route_int("bud"),route("bud"),route(4)) [1] [2]

تحكم: route(4) تعيد "int". دالتنا المسجلة تعيد ثابتًا دون فحص المدخل؛ لا يعني تسجيل int أنها ترفض النص تلقائيًا. [1] [2]

المراجع

  1. Python register return
  2. CPython dispatch wrapper

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

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