تقنية

untokenize في بايثون: هل تعيد bytes دائمًا؟

مساران ونوعان
تفسير توضيحي [1] [2]

قارن نوع الناتج ورمز الترميز. [1] [2]

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

لا؛ غياب رمز الترميز يعطي نصًا. [1] [2]

  • tokenize تقرأ بايتات. [1] [2]
  • generate_tokens تقرأ نصًا. [1] [2]
  • الأولى تنتج ENCODING؛ الثانية لا تنتجه. [1] [2]
  • untokenize تعيد هنا bytes ثم str. [1] [2]
  • شيفرتنا صالحة؛ اختبرنا 3.12.14 في الذاكرة. [1] [2]

مدخلان للمثال

tokenize تقرأ بايتات. generate_tokens تقرأ نصًا. [1] [2]

import io,tokenize as t
s="bud=7\n"
b=list(t.tokenize(io.BytesIO(s.encode()).readline))
u=list(t.generate_tokens(io.StringIO(s).readline))
print(any(z.type==t.ENCODING for z in b))
print(any(z.type==t.ENCODING for z in u))
print(type(t.untokenize(b)).__name__)
print(type(t.untokenize(u)).__name__)

[1] [2]

رمز ونوع

الأولى تنتج ENCODING؛ الثانية لا تنتجه. [1] [2]

untokenize تعيد هنا bytes ثم str. [1] [2]

النتيجة: True، False، bytes، str. [1] [2]

ضبط حذف الرمز
تفسير توضيحي [1] [2]

ضبط والنطاق

حذفنا ENCODING من قائمة البايتات في ضبط مستقل؛ صار الناتج str. [1] [2]

شيفرتنا صالحة؛ اختبرنا 3.12.14 في الذاكرة. [1] [2]

المراجع

  1. Python 3.12: ENCODING and output type
  2. CPython 3.12.14: tokenizer wrappers
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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

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