تقنية

untokenize في بايثون: هل تعود المسافات الأصلية؟

مسافات المصدر تختلف عن مسافات النص المعاد
كل نقطة مسافة؛ حذفنا نهاية السطر من الرسم. [1] [2]

بقاء الرموز لا يثبت بقاء التنسيق. [1] [2]

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

ضمان untokenize يخص نوع الرمز ونصه؛ قد تتغير المسافات. [1] [2]

  • المدخل تعليمة إسناد صالحة. [1] [2]
  • نمرر أزواج النوع والنص فقط. [1] [2]
  • النص المعاد يختلف؛ المقارنة False. [1] [2]
  • الاسم x والعامل = والعدد 4 تبقى رموزها. [1] [2]
  • اختبرنا 3.12.14؛ لا نعمم شكل المسافات على الإصدارات. [1] [2]

المثال

import io,tokenize as t
s='x  =  4\n'
r=io.StringIO(s).readline
ts=t.generate_tokens(r)
pairs=((z.type,z.string) for z in ts)
out=t.untokenize(pairs)
print(out==s)
print(repr(out))

[1] [2]

المخرجات: False ثم 'x =4 \n'. [1] [2]

ما الذي بقي؟

في مسار الزوجين، يضيف التنفيذ مسافة بعد الاسم والعدد. [1] [2]

بعد إعادة البناء يبقى تسلسل الأنواع والنصوص؛ مواضع الأعمدة ليست الضمان. [1] [2]

الاسم والعامل والعدد يحافظون على النوع والنص
ثلاثة رموز؛ نهاية السطر وخاتمة التسلسل غير معروضتين. [1] [2]

النطاق

نعرض سلسلة نصية بلا رمز ترميز، ونستخدم repr لإظهار نهاية السطر والمسافة الأخيرة. [1] [2]

المراجع

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

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