تقنية

unwrap في بايثون: ماذا يحدث عند دورة في __wrapped__؟

دورة left وright ترفع ValueError.
الدورة ترفض.

unwrap تتبع __wrapped__ إلى نهاية السلسلة؛ لقاء دورة يرفع ValueError. [1]

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

يرفع الفحص ValueError في دورتنا. [1]

  • unwrap تتبع __wrapped__ إلى نهاية السلسلة؛ لقاء دورة يرفع ValueError. [1]
  • على CPython 3.12.14، نربط left بـright، ثم right بـleft؛ events تسجل دخول الأجسام. [1]
  • unwrap(left) ترفع ValueError؛ العودة إلى دالة سبق المرور بها لا تعطي نهاية للسلسلة. [1]
  • بعد الفحص، events تساوي []؛ لم ندخل جسمي الدالتين في هذا الاختبار. [1]
  • تحكم مستقل: head تشير إلى tail التي بلا __wrapped__؛ unwrap(head) is tail تعطي True والسجل فارغ. نستخدم stop الافتراضية وروابط دوال عادية. [1]

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

unwrap تتبع __wrapped__ إلى نهاية السلسلة؛ لقاء دورة يرفع ValueError. [1]

ربط المثال

على CPython 3.12.14، نربط left بـright، ثم right بـleft؛ events تسجل دخول الأجسام. [1]

فشل فك الدورة

unwrap(left) ترفع ValueError؛ العودة إلى دالة سبق المرور بها لا تعطي نهاية للسلسلة. [1]

from inspect import unwrap events=[] def left():events.append("left") def right():events.append("right") left.__wrapped__=right;right.__wrapped__=left try:unwrap(left) except ValueError:print("ValueError") [1]

unwrap(head) is tail تعطي True.
النهاية تعاد.

الأجسام والتحكم

بعد الفحص، events تساوي []؛ لم ندخل جسمي الدالتين في هذا الاختبار. [1]

print(events) def head():events.append("head") def tail():events.append("tail") head.__wrapped__=tail print(unwrap(head) is tail,events) [1]

تحكم مستقل: head تشير إلى tail التي بلا __wrapped__؛ unwrap(head) is tail تعطي True والسجل فارغ. نستخدم stop الافتراضية وروابط دوال عادية. [1]

المراجع

  1. Python unwrap

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

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