تقنية

pprint في بايثون: هل تكرار مرجع القائمة يعني دورة؟

مشاركة القائمة دون دورة
قبل الإضافة. [1] [2]

نميز مشاركة المرجع من العودة إلى الذات. [1] [2]

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

لا؛ تكرار المرجع نفسه لا يجعل قائمتنا دورية. [1] [2]

  • قبل الإضافة، isrecursive ثم isreadable يعيدان False True. [1] [2]
  • موضعا y يشيران إلى x نفسها. [1] [2]
  • إضافة x إلى ذاتها تنشئ دورة. [1] [2]
  • بعدها تصبح النتيجة True False. [1] [2]
  • اختبرنا 3.12.14 بقوائم عادية، دون eval. [1] [2]

المثال

import pprint as p
x=['bud']; y=[x,x]
print(p.isrecursive(y),
      p.isreadable(y))
x.append(x)
print(p.isrecursive(y),
      p.isreadable(y))

[1] [2]

لماذا لا يكفي تكرار المرجع؟

المصدر هنا يتتبع الحاويات على مسار التمثيل الحالي، ويحذف مرجع الحاوية بعد إنهاء عناصرها. لذلك لا تبقى القائمة المشتركة من المسار الأول كدورة في المسار الثاني. [1] [2]

إضافة الذات تكشف الدورة
بعد الإضافة. [1] [2]

ما الذي تغير؟

بعد x.append(x) يعود المسار إلى قائمة ما زالت قيد التمثيل. isrecursive يكشف الدورة وisreadable يعيد False. تغيير البيانات مقصود في المثال؛ الفحص نفسه لا يزيل الدورة. لا نعمم الحماية على كائنات مخصصة أو نختبر تنفيذ التمثيل. [1] [2]

المراجع

  1. Python 3.12: pprint recursion
  2. CPython 3.12.14: pprint.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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