تقنية

operator.call في بايثون: إلى أين تذهب الكلمة obj؟

call(echo,obj="bud") تعطي bud.
الكلمة تصل.

عند تمرير الدالة بالموضع، obj= تصل إليها ككلمة مفتاحية. [1]

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

إلى الدالة المستدعاة؛ ليست بديلًا عن موضعها. [1]

  • عند تمرير الدالة بالموضع، obj= تصل إليها ككلمة مفتاحية. [1]
  • على CPython 3.12.14، echo تقبل obj بالكلمة المفتاحية وتعيدها؛ call(echo,obj="bud") تعطي bud. [1]
  • التوقيع call(obj, /, *args, **kwargs): ما قبل / موضعي فقط؛ تمرر الكلمات المتبقية للدالة. [1]
  • call(obj=echo) ترفع TypeError: لم نمرر الكائن القابل للاستدعاء بالموضع. سجل echo لم يتغير بعد المحاولة. [1]
  • تحكم مباشر: echo(obj="leaf") تعطي leaf؛ الدالة تقبل الاسم. الإخفاق السابق في استدعاء call دون وسيطها الموضعي، قبل دخول echo. مثال بدالة مؤلفة فقط. [1]

وجهة الكلمة المفتاحية

عند تمرير الدالة بالموضع، obj= تصل إليها ككلمة مفتاحية. [1]

الدالة والقيمة

على CPython 3.12.14، echo تقبل obj بالكلمة المفتاحية وتعيدها؛ call(echo,obj="bud") تعطي bud. [1]

اقرأ الفاصل

التوقيع call(obj, /, *args, **kwargs): ما قبل / موضعي فقط؛ تمرر الكلمات المتبقية للدالة. [1]

from operator import call calls=[] def echo(*,obj): calls.append(obj) return obj print(call(echo,obj="bud")) [1]

call(obj=echo) ترفع TypeError.
الموضع مفقود.

الخطأ والتحكم

call(obj=echo) ترفع TypeError: لم نمرر الكائن القابل للاستدعاء بالموضع. سجل echo لم يتغير بعد المحاولة. [1]

try: call(obj=echo) except TypeError: print("TypeError") print(calls) print(echo(obj="leaf")) [1]

تحكم مباشر: echo(obj="leaf") تعطي leaf؛ الدالة تقبل الاسم. الإخفاق السابق في استدعاء call دون وسيطها الموضعي، قبل دخول echo. مثال بدالة مؤلفة فقط. [1]

المراجع

  1. Python operator.call

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

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