تقنية

singledispatch في بايثون: هل تختار التنفيذ من الوسيط الثاني؟

قبل تسجيل النص: أول عدد يختار int، وأول نص يختار base.
تبديل الموضعين.

singledispatch تختار التنفيذ بحسب نوع الوسيط الأول. [1]

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

لا؛ النوع الأول يحدد الاختيار هنا. [1]

  • singledispatch تختار التنفيذ بحسب نوع الوسيط الأول. [1]
  • على CPython 3.12.14، الافتراضي يعيد base، ونسجل تنفيذًا لـint يعيد int. [1]
  • route(2,"leaf") تعيد int؛ route("leaf",2) تعيد base؛ العدد في الموضع الثاني لا يختار تنفيذ int. [1]
  • بعد تسجيل str: route("leaf",2) تعيد str؛ التسجيل يضيف تنفيذًا لنوع الوسيط الأول. [1]
  • تحكم: route("leaf",8) تعيد str أيضًا، وroute(2,"leaf") تبقى int؛ غيرنا الثاني مع بقاء نوع الأول. [1]

قاعدة الاختيار

singledispatch تختار التنفيذ بحسب نوع الوسيط الأول. [1]

الافتراضي والتسجيل

على CPython 3.12.14، الافتراضي يعيد base، ونسجل تنفيذًا لـint يعيد int. [1]

تبديل الموضعين

route(2,"leaf") تعيد int؛ route("leaf",2) تعيد base؛ العدد في الموضع الثاني لا يختار تنفيذ int. [1]

from functools import singledispatch @singledispatch def route(first,second):return "base" @route.register(int) def route_int(first,second):return "int" print(route(2,"leaf"),route("leaf",2)) [1]

بعد تسجيل str: أول نص يختار str في التحكم.
تسجيل النص.

تسجيل النص والتحكم

بعد تسجيل str: route("leaf",2) تعيد str؛ التسجيل يضيف تنفيذًا لنوع الوسيط الأول. [1]

@route.register(str) def route_str(first,second):return "str" print(route("leaf",2),route("leaf",8),route(2,"leaf")) [1]

تحكم: route("leaf",8) تعيد str أيضًا، وroute(2,"leaf") تبقى int؛ غيرنا الثاني مع بقاء نوع الأول. [1]

المراجع

  1. Python singledispatch

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

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