این توابع هنگامی که انتظار پارامتر bytes را دارند و با پارامتری غیر bytes فراخوانی میشوند، TypeError را raise میکنند.
بافر داخلی PyBytesObject همیشه یک بایت خالی (null) اضافی در پایان برای سازگاری با رشتههای C خاتمهیافتهبهخالی (null terminated) شامل میشود. این بایت اضافی در PyBytes_Size() و نه در آرگومانهای مختلف length و size توابع زیر شمارش میشود.
مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
در صورت موفقیت، شیء بایت جدیدی برمیگرداند که مقدار آن رونوشتی از رشته v و طول آن len است و در صورت شکست NULL برمیگرداند. اگر v برابر NULL باشد، محتویات شیء بایت مقداردهینشده هستند.
مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
یک رشتهی format به سبک printf()در C و تعداد متغیری از آرگومانها میگیرد، اندازهی شیء bytes پایتون که حاصل میشود را محاسبه میکند و یک شیء bytes که مقادیر در آن قالببندی شدهاند برمیگرداند. آرگومانهای متغیر باید از نوعهای C باشند و باید دقیقاً با نویسههای قالب در رشتهی format مطابقت داشته باشند. نویسههای قالب زیر مجاز هستند:
نویسههای قالب
نوع
کامنت
%%
غیرقابل اعمال
نویسهی لفظی %.
%c
int
یک بایت منفرد که بهصورت int در C بازنمایی میشود.
آرایهی نویسهای C که با نویسهی تهی پایان مییابد.
%p
const void*
نمایش اشارهگر C در مبنای شانزده. عمدتاً معادل printf("%p") است، با این تفاوت که شروع آن با مقدار لفظی 0x تضمین شده است، صرفنظر از آنچه printf پلتفرم تولید میکند.
نویسه قالببندی ناشناخته باعث میشود تمام باقیماندهی رشته قالببندی عیناً در شیء نتیجه کپی شود و هر آرگومان اضافی نیز دور ریخته شود.
اشارهگری به محتویات o را برمیگرداند. این اشارهگر به بافر داخلی o اشاره میکند که از len(o)+1 بایت تشکیل شده است. آخرین بایت در بافر همیشه تهی است، صرفنظر از اینکه بایتهای تهی دیگری وجود دارند یا نه. این داده نباید به هیچ شکلی تغییر داده شود، مگر اینکه شیء تازه با استفاده از PyBytes_FromStringAndSize(NULL,size) ایجاد شده باشد. نباید آزادسازی شود. اگر o اصلاً یک شیء بایت نباشد، PyBytes_AsString() مقدار NULL را برمیگرداند و استثنای TypeError را ایجاد میکند.
محتوای شیء obj را که با تهی پایان یافته است، از طریق متغیرهای خروجی buffer و length برمیگرداند. در صورت موفقیت 0 را برمیگرداند.
اگر length برابر NULL باشد، شیء بایت نباید شامل بایتهای تهی تعبیهشده باشد؛ در غیر این صورت، تابع -1 را برمیگرداند و استثنای ValueError بهوجود میآید.
بافر به بافر داخلی obj اشاره میکند که شامل یک بایت تهی اضافی در انتها است (که در length شمرده نمیشود). دادهها نباید به هیچ شکلی تغییر داده شوند، مگر آنکه شیء بهتازگی با استفاده از PyBytes_FromStringAndSize(NULL,size) ایجاد شده باشد. این بافر نباید آزاد شود. اگر obj اصلاً یک شیء بایت نباشد، PyBytes_AsStringAndSize() مقدار -1 را برمیگرداند و استثنای TypeError را ایجاد میکند.
تغییر یافته در نسخهی 3.5: پیشتر، هنگامی که به بایتهای تهی تعبیهشده در شیء بایت برخورد میشد، TypeError رخ میداد.
یک شیء بایت جدید در *bytes ایجاد میکند که شامل محتوای newpart الحاقشده به bytes است؛ فراخوانکننده مالک ارجاع جدید خواهد بود. ارجاع به مقدار قبلی bytes «دزدیدهشده (stolen)» خواهد بود. اگر نتوان شیء جدید را ایجاد کرد، ارجاع قبلی به bytes همچنان «دزدیدهشده» خواهد بود، مقدار *bytes برابر NULL قرار خواهد گرفت و استثنای مناسب تنظیم خواهد شد.
نکته
اگر newpart پروتکل بافر را پیادهسازی کرده باشد، بافر نباید در حین ایجاد شدن شیء بایت جدید تغییر کند.
یک شیء بایت جدید در *bytes ایجاد میکند که محتوای newpart الحاقشده به bytes را در بر دارد. این نسخه ارجاع قوی به newpart را آزاد میکند (یعنی شمارش ارجاع آن را کاهش میدهد).
نکته
اگر newpart پروتکل بافر را پیادهسازی کرده باشد، بافر نباید در حین ایجاد شدن شیء بایت جدید تغییر کند.
sep باید یک شیء bytes پایتون باشد. (توجه داشته باشید که PyUnicode_Join() جداکننده NULL را میپذیرد و آن را بهعنوان یک فاصله در نظر میگیرد، در حالی که PyBytes_Join() جداکننده NULL را نمیپذیرد.)
iterable باید یک شیء پیمایشپذیر باشد که اشیایی را تولید میکند که پروتکل بافر را پیادهسازی کرده باشند.
در صورت موفقیت، یک شیء bytes جدید برمیگرداند. در صورت خطا، یک استثنا تنظیم کرده و NULL برمیگرداند.
اضافه شده در نسخهی 3.14.
نکته
اگر اشیاء iterable پروتکل بافر را پیادهسازی کنند، بافرها نباید در حین ایجاد شیء بایت جدید تغییر داده شوند.
اندازه یک شیء بایت را تغییر میدهد. newsize طول جدید شیء بایت خواهد بود. میتوانید آن را بهصورت ایجاد یک شیء بایت جدید و نابود کردن شیء قدیمی تصور کنید، فقط با کارایی بیشتر. آدرس یک شیء بایت موجود را بهعنوان یک چپمقدار (lvalue) (که ممکن است در آن نوشته شود) به همراه اندازه جدید موردنظر ارسال کنید. در صورت موفقیت، *bytes حاوی شیء بایت با اندازه جدید است و 0 بازگردانده میشود؛ آدرس موجود در *bytes ممکن است با مقدار ورودی آن متفاوت باشد. اگر تخصیص مجدد شکست بخورد، شیء بایت اصلی موجود در *bytes آزاد میشود، *bytes برابر NULL قرار میگیرد، MemoryError تنظیم میشود و -1 بازگردانده میشود.
بازنمایی رشتهای bytes را برمیگرداند. این تابع در حال حاضر برای پیادهسازی bytes.__repr__() در پایتون استفاده میشود.
این تابع بررسی نوع انجام نمیدهد؛ گذراندن bytes بهعنوان یک شیء غیربایتی یا NULL رفتار تعریفنشده است.
اگر smartquotes درست باشد، نمایش در صورت وجود علامتهای نقلقول تکی در bytes، بهجای رشتهی محصور در علامت نقلقول تکی از رشتهی محصور در علامت نقلقول دوتایی استفاده خواهد کرد. برای مثال، رشتهی بایتی 'Python' هنگامی که smartquotes درست باشد بهصورت b"'Python'" و هنگامی که نادرست باشد بهصورت b'\'Python\'' نمایش داده میشود.
در صورت موفقیت، این تابع یک ارجاع قوی به یک شیء str حاوی نمایش را برمیگرداند. در صورت شکست، این تابع NULL را همراه با یک استثنای تنظیمشده برمیگرداند.
رشتهی خنثیشده با بکاسلش s را بازگشایی (unescape) کنید. s نباید NULL باشد. len باید اندازهی s باشد.
errors باید یکی از "strict"، "replace" یا "ignore" باشد. اگر errors برابر NULL باشد، بهطور پیشفرض از "strict" استفاده میشود.
در صورت موفقیت، این تابع یک ارجاع قوی به یک شیء bytes پایتونی حاوی رشتهی گریززداییشده (unescaped) را برمیگرداند. در صورت شکست، این تابع NULL را همراه با یک استثنای تنظیمشده برمیگرداند.
تغییر یافته در نسخهی 3.9: unicode و recode_encoding اکنون استفاده نمیشوند.
اگر size بزرگتر از صفر باشد، size بایت تخصیص دهید و اندازهی نویسنده را روی size تنظیم کنید. فراخواننده مسئول نوشتن size بایت با استفاده از PyBytesWriter_GetData() است. این تابع تخصیص بیش از حد (overallocate) انجام نمیدهد.
در صورت بروز خطا، یک استثنا تنظیم کرده و NULL را برگردانید.
مشابه PyBytes_FromFormat()، اما خروجی را مستقیماً در انتهای نویسنده مینویسد. بافر داخلی نویسنده را در صورت نیاز بزرگ کنید. سپس اندازهی نوشتهشده را به اندازهی نویسنده اضافه کنید.
در صورت موفقیت، 0 را برمیگرداند. در صورت بروز خطا، یک استثنا تنظیم کرده و -1 را برگردانید.
اندازهی نویسنده را به size بایت تغییر دهید. از آن میتوان برای بزرگ کردن یا کوچک کردن نویسنده استفاده کرد. این تابع معمولاً برای دستیابی به کارایی سرشکنشده هنگام تغییر اندازهی مکرر، حافظه را بیشتر تخصیص میدهد.
با اضافه کردن grow بایت به اندازهی فعلی نویسنده، اندازهی آن را تغییر دهید. این تابع معمولاً برای دستیابی به کارایی سرشکنشده هنگام تغییر اندازهی مکرر، حافظه را بیشتر تخصیص میدهد.
نمونهای از کد که از API منسوخشدهی نرم _PyBytes_Resize() استفاده میکند:
voidcreate_string(Py_ssize_tsize){PyObject*bytes=PyBytes_FromStringAndSize(NULL,size);if(bytes==NULL){returnNULL;}char*str=PyBytes_AS_STRING(bytes);// ... write data into str ...if(_PyBytes_Resize(&bytes,(str-PyBytes_AS_STRING(bytes)))){returnNULL;}returnbytes;}
اکنون میتوان آن را به شکل زیر بهروزرسانی کرد:
voidcreate_string(Py_ssize_tsize){PyBytesWriter*writer=PyBytesWriter_Create(size);if(writer==NULL){returnNULL;}char*str=PyBytesWriter_GetData(writer);// ... write data into str ...returnPyBytesWriter_FinishWithPointer(writer,str;}
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا اشکالی یافتید؟
ساخته شده با Sphinx 9.1.0.
You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.