تقنية

peek في بايثون: أي موضع يبقى ثابتًا؟

بعد peek: القارئ 0 والمصدر 4.
بعد المعاينة.

peek تبقي موضع القارئ المنطقي؛ ملء مخزنه قد يحرك موضع المصدر إلى الأمام، كما في تجربتنا. [1]

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

موضع القارئ؛ المصدر يتقدم هنا. [1]

  • peek تبقي موضع القارئ المنطقي؛ ملء مخزنه قد يحرك موضع المصدر إلى الأمام، كما في تجربتنا. [1]
  • على CPython 3.12.14، raw مخزن BytesIO يحوي b"budleaf"؛ reader من BufferedReader بحجم 4 بايت. [1]
  • reader.peek(2) تعطي b"budl"؛ reader.tell() تساوي 0، بينما raw.tell() تساوي 4. [1]
  • reader.read(1) التالية تعطي b"b"؛ موضع القارئ يصبح 1، والمصدر يبقى 4؛ البايت الأول لم يُتجاوز. [1]
  • كمية peek قد تقل أو تزيد عن الطلب. تحكم بمصدر جديد دون الغلاف: read(2) تعطي b"bu" والموضع 2. تجربة ذاكرة فقط. [1]

القارئ والمصدر

peek تبقي موضع القارئ المنطقي؛ ملء مخزنه قد يحرك موضع المصدر إلى الأمام، كما في تجربتنا. [1]

مخزن المثال

على CPython 3.12.14، raw مخزن BytesIO يحوي b"budleaf"؛ reader من BufferedReader بحجم 4 بايت. [1]

بعد المعاينة

reader.peek(2) تعطي b"budl"؛ reader.tell() تساوي 0، بينما raw.tell() تساوي 4. [1]

import io raw=io.BytesIO(b"budleaf") reader=io.BufferedReader(raw,buffer_size=4) print(reader.peek(2)) print(reader.tell(),raw.tell()) [1]

بعد read(1): القارئ 1 والمصدر 4.
بعد القراءة.

القراءة والتحكم

reader.read(1) التالية تعطي b"b"؛ موضع القارئ يصبح 1، والمصدر يبقى 4؛ البايت الأول لم يُتجاوز. [1]

print(reader.read(1)) print(reader.tell(),raw.tell()) direct=io.BytesIO(b"budleaf") print(direct.read(2),direct.tell()) [1]

كمية peek قد تقل أو تزيد عن الطلب. تحكم بمصدر جديد دون الغلاف: read(2) تعطي b"bu" والموضع 2. تجربة ذاكرة فقط. [1]

المراجع

  1. Python BufferedReader

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

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