اشیاء بایت¶
این توابع هنگامی که انتظار پارامتر bytes را دارند و با پارامتری غیر bytes فراخوانی میشوند، TypeError را raise میکنند.
جزئیات پیادهسازی در CPython: The internal buffer of PyBytesObject always includes an extra
trailing null byte for compatibility with null terminated C strings.
This extra byte is not counted in PyBytes_Size() nor in the
various length and size arguments of the functions below.
-
PyTypeObject PyBytes_Type¶
- قسمتی از ABI پایدار.
این نمونه از
PyTypeObjectنوع bytes پایتون را نمایندگی میکند؛ این همان شیءbytesدر لایهی پایتون است.
-
int PyBytes_Check(PyObject *o)¶
اگر شیء o یک شیء bytes یا نمونهای از یک زیرنوع از نوع bytes باشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
int PyBytes_CheckExact(PyObject *o)¶
اگر شیء o یک شیء بایت باشد اما نمونهای از زیرنوعی از نوع بایت نباشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
PyObject *PyBytes_FromString(const char *v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
در صورت موفقیت، شیء بایت جدیدی را برمیگرداند که مقدار آن کپی رشته v است، و در صورت شکست
NULLبرمیگرداند. پارامتر v نبایدNULLباشد؛ بررسی نخواهد شد.
-
PyObject *PyBytes_FromStringAndSize(const char *v, Py_ssize_t len)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
در صورت موفقیت، شیء بایت جدیدی برمیگرداند که مقدار آن رونوشتی از رشته v و طول آن len است و در صورت شکست
NULLبرمیگرداند. اگر v برابرNULLباشد، محتویات شیء بایت مقداردهینشده هستند.
-
PyObject *PyBytes_FromFormat(const char *format, ...)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
یک رشتهی format به سبک
printf()در C و تعداد متغیری از آرگومانها میگیرد، اندازهی شیء bytes پایتون که حاصل میشود را محاسبه میکند و یک شیء bytes که مقادیر در آن قالببندی شدهاند برمیگرداند. آرگومانهای متغیر باید از نوعهای C باشند و باید دقیقاً با نویسههای قالب در رشتهی format مطابقت داشته باشند. نویسههای قالب زیر مجاز هستند:نویسههای قالب
نوع
کامنت
%%غیرقابل اعمال
نویسهی لفظی %.
%cint
یک بایت منفرد که بهصورت int در C بازنمایی میشود.
%dint
معادل
printf("%d")است. [1]%uunsigned int
معادل
printf("%u")است. [1]%ldlong
معادل
printf("%ld"). [1]%luunsigned long
معادل
printf("%lu"). [1]%zdمعادل
printf("%zd")است. [1]%zusize_t
معادل
printf("%zu")است. [1]%iint
معادل
printf("%i")است. [1]%xint
معادل
printf("%x")است. [1]%sconst char*
آرایهی نویسهای C که با نویسهی تهی پایان مییابد.
%pconst void*
نمایش اشارهگر C در مبنای شانزده. عمدتاً معادل
printf("%p")است، با این تفاوت که شروع آن با مقدار لفظی0xتضمین شده است، صرفنظر از آنچهprintfپلتفرم تولید میکند.نویسه قالببندی ناشناخته باعث میشود تمام باقیماندهی رشته قالببندی عیناً در شیء نتیجه کپی شود و هر آرگومان اضافی نیز دور ریخته شود.
-
PyObject *PyBytes_FromFormatV(const char *format, va_list vargs)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Atomic.
یکسان با
PyBytes_FromFormat()است، بهجز اینکه دقیقاً دو آرگومان میپذیرد.
-
PyObject *PyBytes_FromObject(PyObject *o)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
نمایش بایتی شیء o را که پروتکل بافر را پیادهسازی میکند، برمیگرداند.
توجه
اگر شیء پروتکل بافر را پیادهسازی کند، بافر نباید در حین ایجاد شدن شیء بایت تغییر داده شود.
-
Py_ssize_t PyBytes_Size(PyObject *o)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
طول بایتهای شیء بایت o را برمیگرداند.
-
Py_ssize_t PyBytes_GET_SIZE(PyObject *o)¶
- Thread safety: Atomic.
مشابه
PyBytes_Size()، اما بدون بررسی خطا.
-
char *PyBytes_AsString(PyObject *o)¶
- قسمتی از ABI پایدار. Thread safety: Safe to call from multiple threads with external synchronization only.
اشارهگری به محتویات o را برمیگرداند. این اشارهگر به بافر داخلی o اشاره میکند که از
len(o) + 1بایت تشکیل شده است. آخرین بایت در بافر همیشه تهی است، صرفنظر از اینکه بایتهای تهی دیگری وجود دارند یا نه. این داده نباید به هیچ شکلی تغییر داده شود، مگر اینکه شیء تازه با استفاده ازPyBytes_FromStringAndSize(NULL, size)ایجاد شده باشد. نباید آزادسازی شود. اگر o اصلاً یک شیء بایت نباشد،PyBytes_AsString()مقدارNULLرا برمیگرداند و استثنایTypeErrorرا ایجاد میکند.
-
char *PyBytes_AS_STRING(PyObject *string)¶
- Thread safety: Safe to call from multiple threads with external synchronization only.
مشابه
PyBytes_AsString()، اما بدون بررسی خطا.
-
int PyBytes_AsStringAndSize(PyObject *obj, char **buffer, Py_ssize_t *length)¶
- قسمتی از ABI پایدار. Thread safety: Safe to call from multiple threads with external synchronization only.
محتوای شیء obj را که با تهی پایان یافته است، از طریق متغیرهای خروجی buffer و length برمیگرداند. در صورت موفقیت
0را برمیگرداند.اگر length برابر
NULLباشد، شیء بایت نباید شامل بایتهای تهی تعبیهشده باشد؛ در غیر این صورت، تابع-1را برمیگرداند و استثنایValueErrorبهوجود میآید.بافر به بافر داخلی obj اشاره میکند که شامل یک بایت تهی اضافی در انتها است (که در length شمرده نمیشود). دادهها نباید به هیچ شکلی تغییر داده شوند، مگر آنکه شیء بهتازگی با استفاده از
PyBytes_FromStringAndSize(NULL, size)ایجاد شده باشد. این بافر نباید آزاد شود. اگر obj اصلاً یک شیء بایت نباشد،PyBytes_AsStringAndSize()مقدار-1را برمیگرداند و استثنایTypeErrorرا ایجاد میکند.تغییر یافته در نسخهی 3.5: پیشتر، هنگامی که به بایتهای تهی تعبیهشده در شیء بایت برخورد میشد،
TypeErrorرخ میداد.
-
void PyBytes_Concat(PyObject **bytes, PyObject *newpart)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
یک شیء بایت جدید در *bytes ایجاد میکند که شامل محتوای newpart الحاقشده به bytes است؛ فراخوانکننده مالک ارجاع جدید خواهد بود. ارجاع به مقدار قبلی bytes «دزدیدهشده (stolen)» خواهد بود. اگر نتوان شیء جدید را ایجاد کرد، ارجاع قبلی به bytes همچنان «دزدیدهشده» خواهد بود، مقدار *bytes برابر
NULLقرار خواهد گرفت و استثنای مناسب تنظیم خواهد شد.توجه
اگر newpart پروتکل بافر را پیادهسازی کرده باشد، بافر نباید در حین ایجاد شدن شیء بایت جدید تغییر کند.
-
void PyBytes_ConcatAndDel(PyObject **bytes, PyObject *newpart)¶
- قسمتی از ABI پایدار. Thread safety: Safe for concurrent use on the same object.
یک شیء بایت جدید در *bytes ایجاد میکند که محتوای newpart الحاقشده به bytes را در بر دارد. این نسخه ارجاع قوی به newpart را آزاد میکند (یعنی شمارش ارجاع آن را کاهش میدهد).
توجه
اگر newpart پروتکل بافر را پیادهسازی کرده باشد، بافر نباید در حین ایجاد شدن شیء بایت جدید تغییر کند.
-
PyObject *PyBytes_Join(PyObject *sep, PyObject *iterable)¶
- Thread safety: Safe for concurrent use on the same object.
مشابه
sep.join(iterable)در پایتون.sep باید یک شیء
bytesپایتون باشد. (توجه داشته باشید کهPyUnicode_Join()جداکنندهNULLرا میپذیرد و آن را بهعنوان یک فاصله در نظر میگیرد، در حالی کهPyBytes_Join()جداکنندهNULLرا نمیپذیرد.)iterable باید یک شیء پیمایشپذیر باشد که اشیایی را تولید میکند که پروتکل بافر را پیادهسازی کرده باشند.
در صورت موفقیت، یک شیء
bytesجدید برمیگرداند. در صورت خطا، یک استثنا تنظیم کرده وNULLبرمیگرداند.اضافه شده در نسخهی 3.14.
توجه
اگر اشیاء iterable پروتکل بافر را پیادهسازی کنند، بافرها نباید در حین ایجاد شیء بایت جدید تغییر داده شوند.
-
int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)¶
- Thread safety: Safe to call without external synchronization on distinct objects.
اندازه یک شیء بایت را تغییر میدهد. newsize طول جدید شیء بایت خواهد بود. میتوانید آن را بهصورت ایجاد یک شیء بایت جدید و نابود کردن شیء قدیمی تصور کنید، فقط با کارایی بیشتر. آدرس یک شیء بایت موجود را بهعنوان یک چپمقدار (lvalue) (که ممکن است در آن نوشته شود) به همراه اندازه جدید موردنظر ارسال کنید. در صورت موفقیت، *bytes حاوی شیء بایت با اندازه جدید است و
0بازگردانده میشود؛ آدرس موجود در *bytes ممکن است با مقدار ورودی آن متفاوت باشد. اگر تخصیص مجدد شکست بخورد، شیء بایت اصلی موجود در *bytes آزاد میشود، *bytes برابرNULLقرار میگیرد،MemoryErrorتنظیم میشود و-1بازگردانده میشود.
-
PyObject *PyBytes_Repr(PyObject *bytes, int smartquotes)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
بازنمایی رشتهای bytes را برمیگرداند. این تابع در حال حاضر برای پیادهسازی
bytes.__repr__()در پایتون استفاده میشود.این تابع بررسی نوع انجام نمیدهد؛ گذراندن bytes بهعنوان یک شیء غیربایتی یا
NULLرفتار تعریفنشده است.اگر smartquotes درست باشد، نمایش در صورت وجود علامتهای نقلقول تکی در bytes، بهجای رشتهی محصور در علامت نقلقول تکی از رشتهی محصور در علامت نقلقول دوتایی استفاده خواهد کرد. برای مثال، رشتهی بایتی
'Python'هنگامی که smartquotes درست باشد بهصورتb"'Python'"و هنگامی که نادرست باشد بهصورتb'\'Python\''نمایش داده میشود.در صورت موفقیت، این تابع یک ارجاع قوی به یک شیء
strحاوی نمایش را برمیگرداند. در صورت شکست، این تابعNULLرا همراه با یک استثنای تنظیمشده برمیگرداند.
-
PyObject *PyBytes_DecodeEscape(const char *s, Py_ssize_t len, const char *errors, Py_ssize_t unicode, const char *recode_encoding)¶
- قسمتی از ABI پایدار. Thread safety: Atomic.
رشتهی خنثیشده با بکاسلش s را بازگشایی (unescape) کنید. s نباید
NULLباشد. len باید اندازهی s باشد.errors باید یکی از
"strict"،"replace"یا"ignore"باشد. اگر errors برابرNULLباشد، بهطور پیشفرض از"strict"استفاده میشود.در صورت موفقیت، این تابع یک ارجاع قوی به یک شیء
bytesپایتونی حاوی رشتهی گریززداییشده (unescaped) را برمیگرداند. در صورت شکست، این تابعNULLرا همراه با یک استثنای تنظیمشده برمیگرداند.تغییر یافته در نسخهی 3.9: unicode و recode_encoding اکنون استفاده نمیشوند.