سؤال

هناك buffer اكتب Python ، لكنني لا أعرف كيف يمكنني استخدامه.

في ال بيثون دوك الوصف هو:

buffer(object[, offset[, size]])

يجب أن تكون وسيطة الكائن كائنًا يدعم واجهة المكالمات العازلة (مثل الأوتار والصفائف والمخازن المؤقتة). سيتم إنشاء كائن عازلة جديد يشير إلى وسيطة الكائن. سيكون الكائن العازلة عبارة عن شريحة من بداية الكائن (أو من الإزاحة المحددة). سوف تمتد الشريحة إلى نهاية الكائن (أو سيكون لها طول تعطى بواسطة وسيطة الحجم).

هل كانت مفيدة؟

المحلول

استخدام مثال:

>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world

المخزن المؤقت في هذه الحالة هو سلسلة فرعية ، تبدأ من الموضع 6 بطول 5 ، ولا يتطلب مساحة تخزين إضافية - فهو يشير إلى شريحة من السلسلة.

هذا ليس مفيدًا جدًا للسلاسل القصيرة مثل هذا ، ولكن قد يكون من الضروري عند استخدام كميات كبيرة من البيانات. يستخدم هذا المثال قابلاً للتغيير bytearray:

>>> s = bytearray(1000000)   # a million zeroed bytes
>>> t = buffer(s, 1)         # slice cuts off the first byte
>>> s[1] = 5                 # set the second element in s
>>> t[0]                     # which is now also the first element in t!
'\x05'

يمكن أن يكون هذا مفيدًا للغاية إذا كنت ترغب في الحصول على أكثر من طريقة عرض على البيانات ولا ترغب في (أو لا يمكنك) عقد نسخ متعددة في الذاكرة.

لاحظ أن buffer تم استبداله بالأفضل memoryview في Python 3 ، على الرغم من أنه يمكنك استخدام إما في Python 2.7.

لاحظ أيضًا أنه لا يمكنك تنفيذ واجهة عازلة لكائناتك الخاصة دون الخوض في API C ، أي لا يمكنك القيام بذلك في Python النقي.

نصائح أخرى

أعتقد أن المخازن المؤقتة مفيدة على سبيل المثال عند ربط بيثون بالمكتبات الأصلية. (يوضح Guido Van Rossum buffer في منشور قائمة البريد هذا).

على سبيل المثال ، يبدو أن Numpy يستخدم المخزن المؤقت لتخزين البيانات الفعال:

import numpy
a = numpy.ndarray(1000000)

ال a.data هو:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top