تقنية

BoundArguments في بايثون: هل تتبع args تعديل arguments؟

own(x,*,tag) returns (x,tag); a=signature(own).bind(4,tag="bud"); a.arguments.update(x=9,tag="leaf"); a.args:(9,); a.kwargs:{"tag":"leaf"}; own(*a.args,**a.kwargs):(9,"leaf")
خصائص محسوبة.

قراءة args وkwargs من جديد تعكس تعديل arguments في مثالنا. [1] [2]

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

نعم عند قراءة الخاصية مجددًا. [1] [2]

  • قراءة args وkwargs من جديد تعكس تعديل arguments في مثالنا. [1] [2]
  • على CPython 3.12.14، own(x,*,tag) تعيد الزوج؛ نربط x=4 وtag="bud" صراحة؛ tag بالكلمة المفتاحية فقط، وكلا المعاملين مطلوب. [1] [2]
  • بعد تحديث arguments إلى x=9 وtag="leaf"، args هي (9,) وkwargs هي {"tag":"leaf"}؛ الاستدعاء يعيد (9,"leaf"). [1] [2]
  • التنفيذ يحسب الخاصيتين من الخريطة عند الوصول؛ لا يعيد قراءة مجموعة وسائط محفوظة سابقًا. [1] [2]
  • تحكم مستقل: حفظ control.args وcontrol.kwargs قبل تحديث مماثل يعطي (4,"bud") عند الاستدعاء بهما، والقراءة الجديدة تعطي (9,"leaf"). النطاق لأعداد ونصوص؛ لا نختبر مفاتيح مجهولة أو إكمال الافتراضيات. [1] [2]

قراءة جديدة

قراءة args وkwargs من جديد تعكس تعديل arguments في مثالنا. [1] [2]

ربط صريح

على CPython 3.12.14، own(x,*,tag) تعيد الزوج؛ نربط x=4 وtag="bud" صراحة؛ tag بالكلمة المفتاحية فقط، وكلا المعاملين مطلوب. [1] [2]

بعد التعديل

بعد تحديث arguments إلى x=9 وtag="leaf"، args هي (9,) وkwargs هي {"tag":"leaf"}؛ الاستدعاء يعيد (9,"leaf"). [1] [2]

from inspect import signature def own(x,*,tag):return x,tag a=signature(own).bind(4,tag="bud") a.arguments.update(x=9,tag="leaf") print(a.args,a.kwargs) print(own(*a.args,**a.kwargs)) [1] [2]

own(x,*,tag) returns (x,tag); control=signature(own).bind(4,tag="bud"); cache=control.args,control.kwargs; control.arguments.update(x=9,tag="leaf"); own(*cache[0],**cache[1]):(4,"bud"); own(*control.args,**control.kwargs):(9,"leaf")
وسائط محفوظة.

الحساب والتحكم

التنفيذ يحسب الخاصيتين من الخريطة عند الوصول؛ لا يعيد قراءة مجموعة وسائط محفوظة سابقًا. [1] [2]

control=signature(own).bind(4,tag="bud") cached_args=control.args;cached_kwargs=control.kwargs control.arguments.update(x=9,tag="leaf") print(own(*cached_args,**cached_kwargs)) print(own(*control.args,**control.kwargs)) [1] [2]

تحكم مستقل: حفظ control.args وcontrol.kwargs قبل تحديث مماثل يعطي (4,"bud") عند الاستدعاء بهما، والقراءة الجديدة تعطي (9,"leaf"). النطاق لأعداد ونصوص؛ لا نختبر مفاتيح مجهولة أو إكمال الافتراضيات. [1] [2]

المراجع

  1. Python BoundArguments
  2. CPython inspect

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

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