تقنية

memoryview في بايثون: هل ndim=0 يعني مخزنًا فارغًا؟

عرض صفر أبعاد؛ len(v) ترفع TypeError.
صفر أبعاد.

ndim تعد الأبعاد؛ صفر أبعاد لا يعني صفر بايتات. [1]

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

لا؛ العرض في المثال يحتفظ ببايت واحد. [1]

  • ndim تعد الأبعاد؛ صفر أبعاد لا يعني صفر بايتات. [1]
  • منذ Python 3.12، إذا كان ndim يساوي صفرًا، فإن len(view) ترفع TypeError بدل إرجاع 1. [1]
  • مثال مؤلف على CPython 3.12.14: v=memoryview(b"\x07").cast("B",shape=[])؛ v.ndim يساوي 0 وv.shape هي (). [1]
  • len(v) ترفع TypeError؛ لكن v.nbytes يساوي 1، وهو أيضًا طول v.tobytes() هنا. [1]
  • الفهرسة بالصف الفارغ v[()] تعطي 7. تحكم: v.tobytes() تطابق bytes([7])؛ بقي البايت الأصلي كما كان. [1]

الأبعاد والمحتوى

ndim تعد الأبعاد؛ صفر أبعاد لا يعني صفر بايتات. [1]

شرط الإصدار

منذ Python 3.12، إذا كان ndim يساوي صفرًا، فإن len(view) ترفع TypeError بدل إرجاع 1. [1]

عرض بلا أبعاد

مثال مؤلف على CPython 3.12.14: v=memoryview(b"\x07").cast("B",shape=[])؛ v.ndim يساوي 0 وv.shape هي (). [1]

len(v) -> TypeError [1]

v.nbytes يساوي 1؛ v[()] تعطي 7.
بايت موجود.

الطول والبايت والفهرسة

len(v) ترفع TypeError؛ لكن v.nbytes يساوي 1، وهو أيضًا طول v.tobytes() هنا. [1]

v.nbytes -> 1 [1]

الفهرسة بالصف الفارغ v[()] تعطي 7. تحكم: v.tobytes() تطابق bytes([7])؛ بقي البايت الأصلي كما كان. [1]

المراجع

  1. Python — memoryview

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

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