পাইথন বাফার প্রকারটি কী?


136

bufferপাইথনের এক প্রকার রয়েছে, তবে আমি কীভাবে এটি ব্যবহার করতে পারি তা জানি না।

ইন পাইথন ডক বিবরণ:

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

অবজেক্ট আর্গুমেন্টটি অবশ্যই এমন একটি বস্তু হতে হবে যা বাফার কল ইন্টারফেসকে সমর্থন করে (যেমন স্ট্রিং, অ্যারে এবং বাফার)। একটি নতুন বাফার অবজেক্ট তৈরি করা হবে যা বস্তুর যুক্তিটির উল্লেখ করে। বাফার অবজেক্টটি বস্তুর শুরু থেকে (বা নির্দিষ্ট অফসেট থেকে) এক টুকরো হবে। স্লাইসটি অবজেক্টের শেষ পর্যন্ত প্রসারিত হবে (বা আকারের যুক্তি দ্বারা প্রদত্ত একটি দৈর্ঘ্য হবে)।

উত্তর:


145

একটি উদাহরণ ব্যবহার:

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

এই ক্ষেত্রে বাফারটি একটি সাব-স্ট্রিং, length অবস্থানে দৈর্ঘ্যের 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'

আপনি যদি ডেটাতে একাধিক ভিউ রাখতে চান এবং মেমরিতে একাধিক অনুলিপি রাখতে চান না (বা করতে পারবেন না) এটি খুব সহায়ক হতে পারে।

দ্রষ্টব্য যে পাইথন 3 bufferএ আরও ভাল নাম দ্বারা প্রতিস্থাপন করা হয়েছে memoryview, যদিও আপনি পাইথন ২.7 ব্যবহার করতে পারেন।

এটিও নোট করুন যে আপনি সিআই এ ডেলিং ছাড়াই আপনার নিজের সামগ্রীর জন্য বাফার ইন্টারফেস প্রয়োগ করতে পারবেন না, অর্থাত আপনি খাঁটি পাইথনে এটি করতে পারবেন না।


তোমার ব্যাখ্যার জন্য ধন্যবাদ. তবে আমি এখনও বুঝতে পারি না যে বাফারিং এবং সরল টুকরো টুকরো করার মধ্যে পার্থক্য কী। ব্যবহার s[6:11]অতিরিক্ত স্টোরেজ স্থান নেয় না, আমি কি ভুল?
সাতোরু

9
সাধারণভাবে একটি স্লাইস অতিরিক্ত সঞ্চয়স্থান গ্রহণ করবে, তাই হ্যাঁ s[6:11]একটি অনুলিপি হবে। আপনি যদি সেট করেন t = s[6:11]এবং তারপরে del s, এটি অনুলিপি করে sপ্রমাণিত করে নেওয়া স্মৃতিটিকে মুক্ত করে t। (এটি দেখতে আপনার আরও বড় প্রয়োজন sএবং পাইথনের স্মৃতি ব্যবহার ট্র্যাক করতে হবে )। যদিও খুব বেশি পরিমাণে ডেটা জড়িত না থাকে কেবল অনুলিপি তৈরি করা আরও বেশি দক্ষ।
স্কট গ্রিফিথস

1
আপনাকে অনেক ধন্যবাদ :) বিটিডাব্লু, আপনি দয়া করে আমাকে বলতে পারবেন পাইথনের স্মৃতি ব্যবহার ট্র্যাক করার জন্য আমি কোন সরঞ্জামটি ব্যবহার করতে পারি?
satoru

মেমরি ব্যবহারের জন্য উদাহরণস্বরূপ stackoverflow.com/questions/110259 দেখুন । কখনও কখনও টাস্ক ম্যানেজার / ক্রিয়াকলাপ মনিটর / শীর্ষে পাইথনের ব্যবহারগুলি দেখতে সবচেয়ে সহজ।
স্কট গ্রিফিথস

13
আমার মতো পাইথন নুবসের জন্য: বাফারটি পাইথন 3
ডার্ক

25

আমি মনে করি বাফারগুলি অজগরকে দেশীয় লাইব্রেরিতে ইন্টারফেস করার সময় যেমন দরকারী। (গাইডো van Rossum ব্যাখ্যা bufferমধ্যে এই MAILINGLIST পোস্ট )।

উদাহরণস্বরূপ, নম্পি দক্ষ ডেটা সঞ্চয় করার জন্য বাফার ব্যবহার করে বলে মনে হচ্ছে:

import numpy
a = numpy.ndarray(1000000)

এটি a.dataএকটি:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.