تقنية

linecache في بايثون: هل getlines تعيد قائمة مستقلة؟

تعديل القائمة يغير قراءة المخزن
المخزن. [1] [2]

نعدل قائمة الأسطر، لا نص الملف. [1] [2]

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

لا؛ في تنفيذنا تعيد getlines قائمة المخزن نفسها. [1] [2]

  • كتبنا bud في ملف مؤقت خاص. [1] [2]
  • استبدلنا أول عنصر بالقيمة twig. [1] [2]
  • قراءة getline تعيد twig. [1] [2]
  • قراءة الملف مباشرة تعيد bud. [1] [2]
  • اختبرنا 3.12.14؛ getlines غير مدرجة بواجهة التوثيق. [1] [2]

المثال

import linecache as l
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as d:
    p=Path(d)/'OWN.py'
    p.write_text(
        'bud\n',encoding='utf8')
    k=str(p)
    rows=l.getlines(k)
    rows[0]='twig\n'
    print(repr(l.getline(k,1)))
    print(repr(p.read_text(
        encoding='utf8')))
l.checkcache(k)

[1] [2]

ما الذي تغير؟

المصدر هنا يعيد قائمة الأسطر المحفوظة دون نسخها. تعديل عنصرها يؤثر في القراءة المخزنة، لكنه لا يكتب الملف. تظهر نهاية السطر عبر repr. يحذف السياق ملفنا المؤقت، ثم يفحص checkcache مدخله. [1] [2]

القراءة المباشرة ما زالت bud
الملف. [1] [2]

قائمة للعمل وحدود الفحص

باستخدام l.getlines(k).copy() في موضع الجلب، يبقى السطر المخزن bud رغم تعديل النسخة. نقصر النتيجة على التنفيذ المثبت؛ لا نفترض عقد واجهة عامًّا أو تعديل ملفات أخرى. [1] [2]

المراجع

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

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

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