شیءهای عدد صحیح¶
تمام اعداد صحیح بهصورت اشیاء عدد صحیح «long» با اندازه دلخواه پیادهسازی شدهاند.
در صورت خطا، بیشتر APIهای PyLong_As* مقدار (return type)-1 را برمیگردانند که از یک عدد قابل تشخیص نیست. برای رفع ابهام از PyErr_Occurred() استفاده کنید.
-
type PyLongObject¶
- قسمتی از API محدود (بهعنوان یک ساختار مبهم).
این زیرنوع از
PyObjectیک شیء عدد صحیح پایتون را نشان میدهد.
-
PyTypeObject PyLong_Type¶
- قسمتی از ABI پایدار.
این نمونه از
PyTypeObjectنوع عدد صحیح پایتون را نشان میدهد. این همان شیءintدر لایهی پایتون است.
-
int PyLong_Check(PyObject *p)¶
اگر آرگومان آن یک
PyLongObjectیا زیرنوعی ازPyLongObjectباشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
int PyLong_CheckExact(PyObject *p)¶
در صورتی که آرگومان آن یک
PyLongObjectباشد، اما زیرنوعی ازPyLongObjectنباشد، مقدار true را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
PyObject *PyLong_FromLong(long v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء جدید
PyLongObjectاز v برمیگرداند، یا در صورت شکستNULL.سیپایتون آرایهای از اشیاء عدد صحیح را برای تمام اعداد صحیح بین
-5و256نگه میدارد. وقتی شما یک int در این بازه ایجاد میکنید، در واقع فقط ارجاعی به شیء موجود را دریافت میکنید.
-
PyObject *PyLong_FromUnsignedLong(unsigned long v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء جدید
PyLongObjectاز یک unsigned long در C برمیگرداند، یا در صورت شکستNULL.
-
PyObject *PyLong_FromSsize_t(Py_ssize_t v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء جدید
PyLongObjectاز یکPy_ssize_tدر C برمیگرداند، یا در صورت شکستNULL.
-
PyObject *PyLong_FromSize_t(size_t v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء جدید
PyLongObjectاز یکsize_tدر C برمیگرداند، یا در صورت شکستNULL.
-
PyObject *PyLong_FromLongLong(long long v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء جدید
PyLongObjectاز یک long long در C برمیگرداند، یا در صورت شکستNULL.
-
PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء جدید
PyLongObjectاز یک unsigned long long در C برمیگرداند، یا در صورت شکستNULL.
-
PyObject *PyLong_FromInt32(int32_t value)¶
-
PyObject *PyLong_FromInt64(int64_t value)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
یک شیء جدید
PyLongObjectاز یک int32_t یا int64_t علامتدار در C برمیگرداند، یا در صورت شکستNULLرا همراه با یک استثنای تنظیمشده برمیگرداند.اضافه شده در نسخهی 3.14.
-
PyObject *PyLong_FromUInt32(uint32_t value)¶
-
PyObject *PyLong_FromUInt64(uint64_t value)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
یک شیء جدید
PyLongObjectاز یک uint32_t یا uint64_t بدون علامت C برمیگرداند، یا در صورت شکست،NULLهمراه با یک استثنای تنظیمشده برمیگرداند.اضافه شده در نسخهی 3.14.
-
PyObject *PyLong_FromDouble(double v)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء جدید
PyLongObjectاز بخش عدد صحیح v برمیگرداند، یا در صورت شکستNULL.
-
PyObject *PyLong_FromString(const char *str, char **pend, int base)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک
PyLongObjectجدید بر اساس مقدار رشتهای موجود در str برمیگرداند که مطابق با مبنای عددی موجود در base تفسیر میشود، یا در صورت شکستNULLبرمیگرداند. اگر pend غیرNULLباشد، *pend در صورت موفقیت به انتهای str و در صورت خطا به نخستین نویسهای که نتوان آن را پردازش کرد اشاره خواهد کرد. اگر base برابر0باشد، str با استفاده از تعریف مقادیر لفظی عدد صحیح تفسیر میشود؛ در این حالت، صفرهای ابتدایی در یک عدد دهدهی غیرصفر باعث پرتاب استثنایValueErrorمیشوند. اگر base برابر0نباشد، باید مقداری بین2و36(با احتساب هر دو) باشد. فضاهای سفید ابتدایی و انتهایی و همچنین زیرسطرهای تکی پس از مشخصکنندهی مبنا و بین ارقام نادیده گرفته میشوند. اگر هیچ رقمی وجود نداشته باشد یا str پس از ارقام و فضاهای سفید انتهایی با NULL خاتمه نیافته باشد، استثنایValueErrorپرتاب خواهد شد.همچنین ملاحظه نمائید
میتوان از توابع
PyLong_AsNativeBytes()وPyLong_FromNativeBytes()برای تبدیل یکPyLongObjectبه/از آرایهای از بایتها در مبنای256استفاده کرد.
-
PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)¶
- مقدار بازگشتی: مرجع جدید.
تبدیل دنبالهای از ارقام یونیکد در رشته u به یک مقدار عدد صحیح پایتون.
اضافه شده در نسخهی 3.3.
-
PyObject *PyLong_FromVoidPtr(void *p)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک عدد صحیح پایتون از اشارهگر p میسازد. مقدار اشارهگر را میتوان با استفاده از
PyLong_AsVoidPtr()از مقدار حاصل بازیابی کرد.
-
PyObject *PyLong_FromNativeBytes(const void *buffer, size_t n_bytes, int flags)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
یک عدد صحیح پایتون از مقدار موجود در n_bytes اول buffer میسازد که بهعنوان یک عدد علامتدار مکمل دو تفسیر میشود.
flags همانطور است که برای
PyLong_AsNativeBytes()توضیح داده شده است. با ارسال-1، اندیان بومیای که سیپایتون با آن کامپایل شده است انتخاب میشود و فرض میشود که بیشارزشترین بیت، بیت علامت است. با ارسالPy_ASNATIVEBYTES_UNSIGNED_BUFFER، همان نتیجهی فراخوانیPyLong_FromUnsignedNativeBytes()تولید میشود. سایر پرچمها نادیده گرفته میشوند.اضافه شده در نسخهی 3.13.
-
PyObject *PyLong_FromUnsignedNativeBytes(const void *buffer, size_t n_bytes, int flags)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
یک عدد صحیح پایتون از مقدار موجود در n_bytes بایت اول buffer بسازید که بهعنوان یک عدد بدون علامت تفسیر میشود.
flags همانند
PyLong_AsNativeBytes()است. ارسال-1اندیان بومیای را که سیپایتون با آن کامپایل شده است انتخاب میکند و فرض میکند که بیشاهمیتترین بیت، بیت علامت نیست. پرچمهای غیر از اندیان نادیده گرفته میشوند.اضافه شده در نسخهی 3.13.
-
PyLong_FromPid(pid)¶
ماکرویی برای ایجاد یک عدد صحیح پایتون از شناسهی فرایند.
این میتواند بسته به اندازهی نوع PID سیستم، به عنوان مستعاری برای
PyLong_FromLong()یاPyLong_FromLongLong()تعریف شود.اضافه شده در نسخهی 3.2.
-
long PyLong_AsLong(PyObject *obj)¶
- قسمتی از ABI پایدار.
نمایشی از نوع long در زبان C از obj برمیگرداند. اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا بهPyLongObjectتبدیل شود.اگر مقدار obj خارج از محدودهی long باشد، استثنای
OverflowErrorایجاد میشود.در صورت خطا
-1برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.تغییر یافته در نسخهی 3.8: در صورت وجود، از
__index__()استفاده کنید.تغییر یافته در نسخهی 3.10: این تابع دیگر از
__int__()استفاده نخواهد کرد.-
long PyLong_AS_LONG(PyObject *obj)¶
دقیقاً معادل
PyLong_AsLongترجیحی است. بهطور خاص، میتواند باOverflowErrorیا استثنای دیگری شکست بخورد.منسوخسازی نرم <Soft deprecated> از نسخهی 3.14.
-
long PyLong_AS_LONG(PyObject *obj)¶
-
int PyLong_AsInt(PyObject *obj)¶
- قسمتی از ABI پایدار از نسخهی 3.13.
مانند
PyLong_AsLong()، اما نتیجه را بهجای یک long در C، در یک int در C ذخیره میکند.اضافه شده در نسخهی 3.13.
-
long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)¶
- قسمتی از ABI پایدار.
نمایشی از نوع long در زبان C از obj برمیگرداند. اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا بهPyLongObjectتبدیل شود.اگر مقدار obj بزرگتر از
LONG_MAXیا کوچکتر ازLONG_MINباشد، *overflow را بهترتیب برابر1یا-1قرار میدهد و-1را برمیگرداند؛ در غیر این صورت، *overflow را برابر0قرار میدهد. اگر هر استثنای دیگری رخ دهد، *overflow را برابر0قرار میدهد و-1را طبق معمول برمیگرداند.در صورت خطا
-1برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.تغییر یافته در نسخهی 3.8: در صورت وجود، از
__index__()استفاده کنید.تغییر یافته در نسخهی 3.10: این تابع دیگر از
__int__()استفاده نخواهد کرد.
-
long long PyLong_AsLongLong(PyObject *obj)¶
- قسمتی از ABI پایدار.
نمایشی از obj به صورت C long long برمیگرداند. اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا بهPyLongObjectتبدیل شود.اگر مقدار obj خارج از محدودهی long long باشد،
OverflowErrorایجاد میشود.در صورت خطا
-1برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.تغییر یافته در نسخهی 3.8: در صورت وجود، از
__index__()استفاده کنید.تغییر یافته در نسخهی 3.10: این تابع دیگر از
__int__()استفاده نخواهد کرد.
-
long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)¶
- قسمتی از ABI پایدار.
نمایشی از obj به صورت C long long برمیگرداند. اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا بهPyLongObjectتبدیل شود.اگر مقدار obj بزرگتر از
LLONG_MAXیا کوچکتر ازLLONG_MINباشد، *overflow را بهترتیب روی1یا-1قرار میدهد و-1را برمیگرداند؛ در غیر این صورت، *overflow را روی0قرار میدهد. اگر استثنای دیگری رخ دهد، *overflow را روی0قرار میدهد و-1را طبق معمول برمیگرداند.در صورت خطا
-1برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.8: در صورت وجود، از
__index__()استفاده کنید.تغییر یافته در نسخهی 3.10: این تابع دیگر از
__int__()استفاده نخواهد کرد.
-
Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)¶
- قسمتی از ABI پایدار.
نمایش C از pylong بهصورت
Py_ssize_tرا برمیگرداند. pylong باید نمونهای ازPyLongObjectباشد.اگر مقدار pylong خارج از محدودهی
Py_ssize_tباشد، استثنایOverflowErrorایجاد میکند.در صورت خطا
-1برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.
-
unsigned long PyLong_AsUnsignedLong(PyObject *pylong)¶
- قسمتی از ABI پایدار.
نمایش unsigned long در C از pylong را برمیگرداند. pylong باید نمونهای از
PyLongObjectباشد.اگر مقدار pylong خارج از محدودهی unsigned long باشد،
OverflowErrorایجاد میکند.در صورت خطا
(unsigned long)-1را برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.
-
size_t PyLong_AsSize_t(PyObject *pylong)¶
- قسمتی از ABI پایدار.
نمایش C
size_tاز pylong را برمیگرداند. pylong باید نمونهای ازPyLongObjectباشد.اگر مقدار pylong خارج از محدودهی
size_tباشد، استثنایOverflowErrorرا ایجاد میکند.در صورت خطا
(size_t)-1برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.
-
unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)¶
- قسمتی از ABI پایدار.
نمایش C unsigned long long از pylong را برمیگرداند. pylong باید نمونهای از
PyLongObjectباشد.اگر مقدار pylong خارج از محدودهی یک unsigned long long باشد، استثنای
OverflowErrorایجاد میشود.در صورت خطا
(unsigned long long)-1برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.تغییر یافته در نسخهی 3.1: یک pylong منفی اکنون
OverflowErrorایجاد میکند، نهTypeError.
-
unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)¶
- قسمتی از ABI پایدار.
نمایشی از obj را به صورت unsigned long در C برمیگرداند. اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا به یکPyLongObjectتبدیل شود.اگر مقدار obj خارج از بازهی unsigned long باشد، کاهش آن مقدار به پیمانهی
ULONG_MAX + 1را برمیگرداند.در صورت خطا
(unsigned long)-1را برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.تغییر یافته در نسخهی 3.8: در صورت وجود، از
__index__()استفاده کنید.تغییر یافته در نسخهی 3.10: این تابع دیگر از
__int__()استفاده نخواهد کرد.
-
unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)¶
- قسمتی از ABI پایدار.
یک نمایش unsigned long long در C از obj برمیگرداند. اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا آن را به یکPyLongObjectتبدیل کند.اگر مقدار obj خارج از محدودهی unsigned long long باشد، کاهش آن مقدار به پیمانهی
ULLONG_MAX + 1برگردانده میشود.در صورت خطا
(unsigned long long)-1را برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.تغییر یافته در نسخهی 3.8: در صورت وجود، از
__index__()استفاده کنید.تغییر یافته در نسخهی 3.10: این تابع دیگر از
__int__()استفاده نخواهد کرد.
-
int PyLong_AsInt32(PyObject *obj, int32_t *value)¶
-
int PyLong_AsInt64(PyObject *obj, int64_t *value)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
مقدار *value را به نمایش علامتدار int32_t یا int64_t زبان C از obj تنظیم میکند.
اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا آن را بهPyLongObjectتبدیل کند.اگر مقدار obj خارج از محدوده باشد، یک
OverflowErrorایجاد میشود.در صورت موفقیت، *value را تنظیم کرده و
0را برمیگرداند. در صورت خطا، یک استثنا تنظیم کرده و-1را برمیگرداند.value نباید
NULLباشد.اضافه شده در نسخهی 3.14.
-
int PyLong_AsUInt32(PyObject *obj, uint32_t *value)¶
-
int PyLong_AsUInt64(PyObject *obj, uint64_t *value)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
مقدار *value را به بازنمایی بدون علامت uint32_t یا uint64_t در C از obj تنظیم کنید.
اگر obj نمونهای از
PyLongObjectنباشد، ابتدا متد__index__()آن (در صورت وجود) فراخوانی میشود تا آن را بهPyLongObjectتبدیل کند.اگر obj منفی باشد، یک
ValueErrorraise میشود.اگر مقدار obj خارج از محدوده باشد، یک
OverflowErrorایجاد میشود.
در صورت موفقیت، *value را تنظیم کرده و
0را برمیگرداند. در صورت خطا، یک استثنا تنظیم کرده و-1را برمیگرداند.value نباید
NULLباشد.اضافه شده در نسخهی 3.14.
-
double PyLong_AsDouble(PyObject *pylong)¶
- قسمتی از ABI پایدار.
بازنمایی pylong را بهصورت یک double در C برمیگرداند. pylong باید نمونهای از
PyLongObjectباشد.اگر مقدار pylong از محدودهی double خارج باشد، استثنای
OverflowErrorایجاد میشود.در صورت خطا
-1.0برمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.
-
void *PyLong_AsVoidPtr(PyObject *pylong)¶
- قسمتی از ABI پایدار.
یک عدد صحیح پایتون pylong را به یک اشارهگر void در C تبدیل میکند. اگر pylong قابل تبدیل نباشد، یک
OverflowErrorبهوجود میآید. تولید اشارهگر void قابل استفاده فقط برای مقادیری که باPyLong_FromVoidPtr()ایجاد شدهاند تضمین میشود.در صورت خطا
NULLبرمیگرداند. برای رفع ابهام ازPyErr_Occurred()استفاده کنید.
-
Py_ssize_t PyLong_AsNativeBytes(PyObject *pylong, void *buffer, Py_ssize_t n_bytes, int flags)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
مقدار عدد صحیح پایتون pylong را به یک buffer بومی با اندازهی n_bytes کپی کنید. flags را میتوان روی
-1تنظیم کرد تا مشابه تبدیل نوع در زبان C رفتار کند، یا برای کنترل رفتار، روی مقادیر مستندشده در ادامه تنظیم کرد.در صورت خطا،
-1را همراه با ایجاد یک استثنا برمیگرداند. این ممکن است زمانی رخ دهد که pylong نتواند بهعنوان یک عدد صحیح تفسیر شود، یا اینکه pylong منفی بوده و پرچمPy_ASNATIVEBYTES_REJECT_NEGATIVEتنظیم شده باشد.در غیر این صورت، تعداد بایتهای مورد نیاز برای ذخیره مقدار را برمیگرداند. اگر این عدد برابر یا کمتر از n_bytes باشد، کل مقدار کپی شده است. تمام n_bytes بافر نوشته میشوند: بایتهای باقیمانده با کپیهایی از بیت علامت پر میشوند.
اگر مقدار بازگشتی بزرگتر از n_bytes باشد، مقدار اسلایسشده است: هر تعداد از کمارزشترین بیتهای مقدار که جا داشتند نوشته میشوند و بیتهای پرارزش نادیده گرفته میشوند. این با رفتار معمول تبدیل نوع به پایین (downcast) به سبک C مطابقت دارد.
توجه
سرریز بهعنوان خطا در نظر گرفته نمیشود. اگر مقدار بازگشتی بزرگتر از n_bytes باشد، بیتهای پرارزش دور ریخته شدهاند.
0هرگز بازگردانده نمیشود.مقادیر همیشه بهصورت مکمل دو کپی میشوند.
مثال استفاده:
int32_t value; Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, &value, sizeof(value), -1); if (bytes < 0) { // Failed. A Python exception was set with the reason. return NULL; } else if (bytes <= (Py_ssize_t)sizeof(value)) { // Success! } else { // Overflow occurred, but 'value' contains the truncated // lowest bits of pylong. }
ارسال صفر به n_bytes اندازهی بافری را برمیگرداند که برای نگهداشتن مقدار بهاندازهی کافی بزرگ باشد. این اندازه ممکن است از آنچه از نظر فنی لازم است بزرگتر باشد، اما نه بهطور نامعقول. اگر n_bytes=0 باشد، buffer میتواند
NULLباشد.توجه
ارسال n_bytes=0 به این تابع، راه دقیقی برای تعیین طول بیتی مقدار نیست.
برای دسترسی به کل مقدار پایتون با اندازهی نامشخص، میتوان تابع را دو بار فراخوانی کرد: ابتدا برای تعیین اندازهی بافر، سپس برای پر کردن آن:
// Ask how much space we need. Py_ssize_t expected = PyLong_AsNativeBytes(pylong, NULL, 0, -1); if (expected < 0) { // Failed. A Python exception was set with the reason. return NULL; } assert(expected != 0); // Impossible per the API definition. uint8_t *bignum = malloc(expected); if (!bignum) { PyErr_SetString(PyExc_MemoryError, "bignum malloc failed."); return NULL; } // Safely get the entire value. Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, bignum, expected, -1); if (bytes < 0) { // Exception has been set. free(bignum); return NULL; } else if (bytes > expected) { // This should not be possible. PyErr_SetString(PyExc_RuntimeError, "Unexpected bignum truncation after a size check."); free(bignum); return NULL; } // The expected success given the above pre-check. // ... use bignum ... free(bignum);
flags یا
-1(Py_ASNATIVEBYTES_DEFAULTS) است تا پیشفرضهایی را انتخاب کند که رفتارشان بیشترین شباهت را به قالبریزی C دارد، یا ترکیبی از پرچمهای دیگر در جدول زیر است. توجه داشته باشید که-1را نمیتوان با پرچمهای دیگر ترکیب کرد.در حال حاضر،
-1معادلPy_ASNATIVEBYTES_NATIVE_ENDIAN | Py_ASNATIVEBYTES_UNSIGNED_BUFFERاست.پرچم
مقدار
-
Py_ASNATIVEBYTES_DEFAULTS¶
- قسمتی از ABI پایدار از نسخهی 3.14.
-1-
Py_ASNATIVEBYTES_BIG_ENDIAN¶
- قسمتی از ABI پایدار از نسخهی 3.14.
0-
Py_ASNATIVEBYTES_LITTLE_ENDIAN¶
- قسمتی از ABI پایدار از نسخهی 3.14.
1-
Py_ASNATIVEBYTES_NATIVE_ENDIAN¶
- قسمتی از ABI پایدار از نسخهی 3.14.
3-
Py_ASNATIVEBYTES_UNSIGNED_BUFFER¶
- قسمتی از ABI پایدار از نسخهی 3.14.
4-
Py_ASNATIVEBYTES_REJECT_NEGATIVE¶
- قسمتی از ABI پایدار از نسخهی 3.14.
8-
Py_ASNATIVEBYTES_ALLOW_INDEX¶
- قسمتی از ABI پایدار از نسخهی 3.14.
16مشخص کردن
Py_ASNATIVEBYTES_NATIVE_ENDIANهر پرچم اندیان دیگری را لغو میکند. ارسال2رزرو شده است.بهطور پیشفرض، بافر کافی برای گنجاندن بیت علامت درخواست میشود. برای مثال، هنگام تبدیل ۱۲۸ با n_bytes=1، تابع ۲ (یا بیشتر) را برمیگرداند تا بیت علامت صفر ذخیره شود.
اگر
Py_ASNATIVEBYTES_UNSIGNED_BUFFERمشخص شده باشد، بیت علامت صفر از محاسبات اندازه حذف میشود. این امکان را فراهم میکند که برای مثال عدد ۱۲۸ در یک بافر تکبایتی جا شود. اگر بافر مقصد بعداً علامتدار تلقی شود، ممکن است یک مقدار ورودی مثبت به مقداری منفی تبدیل شود. توجه داشته باشید که این پرچم بر مدیریت مقادیر منفی تأثیری ندارد: برای این مقادیر، همیشه فضایی برای بیت علامت درخواست میشود.مشخص کردن
Py_ASNATIVEBYTES_REJECT_NEGATIVEباعث میشود در صورت منفی بودن pylong، یک استثنا تنظیم شود. بدون این پرچم، مقادیر منفی کپی میشوند، به شرطی که فضای کافی برای حداقل یک بیت علامت وجود داشته باشد؛ صرفنظر از اینکهPy_ASNATIVEBYTES_UNSIGNED_BUFFERمشخص شده باشد یا خیر.اگر
Py_ASNATIVEBYTES_ALLOW_INDEXتعیین شده باشد و یک مقدار غیر عدد صحیح پاس داده شود، متد__index__()آن ابتدا فراخوانی خواهد شد. این ممکن است منجر به اجرای کد پایتون شود و به نخهای دیگر اجازه اجرا داده شود، که میتواند تغییراتی در اشیاء یا مقادیر دیگر در حال استفاده ایجاد کند. وقتی flags برابر-1باشد، این گزینه تنظیم نشده است و مقادیر غیر عدد صحیح باعث ایجادTypeErrorمیشوند.توجه
با flags پیشفرض (
-1، یا UNSIGNED_BUFFER بدون REJECT_NEGATIVE)، چندین عدد صحیح پایتون میتوانند بدون سرریز به یک مقدار واحد نگاشت شوند. برای مثال، هر دو255و-1در یک بافر تکبایتی جا میشوند و تمام بیتهای آن را تنظیم میکنند. این با رفتار تبدیل نوع معمول در C مطابقت دارد.اضافه شده در نسخهی 3.13.
-
Py_ASNATIVEBYTES_DEFAULTS¶
-
PyLong_AsPid(pid)¶
ماکرویی برای تبدیل یک عدد صحیح پایتون به شناسه فرایند.
این میتواند بسته به اندازهی نوع PID سیستم، به عنوان نام مستعاری برای
PyLong_AsLong()،PyLong_FromLongLong()یاPyLong_AsInt()تعریف شود.اضافه شده در نسخهی 3.2.
-
int PyLong_GetSign(PyObject *obj, int *sign)¶
علامت شیء عدد صحیح obj را دریافت کنید.
در صورت موفقیت، *sign را برابر علامت عدد صحیح قرار میدهد (به ترتیب ۰، -۱ یا +۱ برای عدد صحیح صفر، منفی یا مثبت) و ۰ را برمیگرداند.
در صورت شکست، مقدار -1 را همراه با یک استثنای تنظیمشده برمیگرداند. اگر obj یک
PyLongObjectیا زیرنوع آن باشد، این تابع همیشه موفق میشود.اضافه شده در نسخهی 3.14.
-
int PyLong_IsPositive(PyObject *obj)¶
بررسی کنید که شیء عدد صحیح obj مثبت باشد (
obj > 0).اگر obj نمونهای از
PyLongObjectیا زیرنوع آن باشد، در صورت مثبت بودن1و در غیر این صورت0را برمیگرداند. وگرنه یک استثنا تنظیم کرده و-1را برمیگرداند.اضافه شده در نسخهی 3.14.
-
int PyLong_IsNegative(PyObject *obj)¶
بررسی میکند که آیا شیء عدد صحیح obj منفی است (
obj < 0).اگر obj نمونهای از
PyLongObjectیا زیرنوع آن باشد، در صورت منفی بودن1و در غیر این صورت0برمیگرداند. وگرنه یک استثنا تنظیم کرده و-1برمیگرداند.اضافه شده در نسخهی 3.14.
-
int PyLong_IsZero(PyObject *obj)¶
بررسی کنید که آیا شیء عدد صحیح obj صفر است.
اگر obj نمونهای از
PyLongObjectیا زیرنوع آن باشد، در صورت صفر بودن مقدار1و در غیر این صورت0را برمیگرداند. در غیر این صورت، یک استثنا تنظیم میکند و-1را برمیگرداند.اضافه شده در نسخهی 3.14.
-
PyObject *PyLong_GetInfo(void)¶
- قسمتی از ABI پایدار.
در صورت موفقیت، یک named tuple فقطخواندنی برمیگرداند که حاوی اطلاعاتی دربارهی نمایش داخلی پایتون از اعداد صحیح است. برای توضیح هر یک از فیلدها به
sys.int_infoمراجعه کنید.در صورت شکست،
NULLرا همراه با یک استثنای تنظیمشده برمیگرداند.اضافه شده در نسخهی 3.1.
-
int PyUnstable_Long_IsCompact(const PyLongObject *op)¶
- این است API ناپایداراین ممکن است بدون هشدار در نسخههای جزئی تغییر کند.
اگر op فشرده باشد، ۱ و در غیر این صورت ۰ برمیگرداند.
این تابع به کدهای حساس به کارایی امکان میدهد تا یک «مسیر سریع» برای اعداد صحیح کوچک پیادهسازی کنند. برای مقادیر فشرده از
PyUnstable_Long_CompactValue()استفاده کنید؛ برای مقادیر دیگر به یک تابعPyLong_As*یاPyLong_AsNativeBytes()مراجعه کنید.انتظار میرود که افزایش سرعت برای اکثر کاربران ناچیز باشد.
اینکه دقیقاً چه مقادیری فشرده در نظر گرفته میشوند، جزئیات پیادهسازی است و ممکن است تغییر کند.
اضافه شده در نسخهی 3.12.
-
Py_ssize_t PyUnstable_Long_CompactValue(const PyLongObject *op)¶
- این است API ناپایداراین ممکن است بدون هشدار در نسخههای جزئی تغییر کند.
اگر op فشرده باشد، همانطور که با
PyUnstable_Long_IsCompact()تعیین میشود، مقدار آن را برمیگرداند.در غیر این صورت، مقدار بازگشتی تعریفنشده است.
اضافه شده در نسخهی 3.12.
API اکسپورت¶
اضافه شده در نسخهی 3.14.
-
struct PyLongLayout¶
چیدمان آرایهای از «رقمها» («limbs» در اصطلاحات GMP)، که برای نمایش مقدار مطلق اعداد صحیح با دقت دلخواه استفاده میشود.
برای دریافت چیدمان بومی اشیاء
intپایتون، که بهطور داخلی برای اعداد صحیح با مقدار مطلق «به اندازه کافی بزرگ» به کار میرود، ازPyLong_GetNativeLayout()استفاده کنید.همچنین
sys.int_infoرا ببینید که اطلاعات مشابهی را در پایتون در دسترس قرار میدهد.-
uint8_t bits_per_digit¶
بیت به ازای هر رقم. برای مثال، یک رقم ۱۵ بیتی به این معنی است که بیتهای ۰ تا ۱۴ حاوی اطلاعات معنادار هستند.
-
uint8_t digit_size¶
اندازه رقم بر حسب بایت. برای مثال، یک رقم ۱۵ بیتی حداقل به ۲ بایت نیاز خواهد داشت.
-
int8_t digits_order¶
ترتیب ارقام:
1برای باارزشترین رقم در ابتدا-1برای کمارزشترین رقم در ابتدا
-
int8_t digit_endianness¶
اندیان ارقام:
1برای معنادارترین بایت در ابتدا (بزرگاندیان)-1برای کمارزشترین بایت در ابتدا (کوچکاندیان)
-
uint8_t bits_per_digit¶
-
const PyLongLayout *PyLong_GetNativeLayout(void)¶
دریافت چیدمان بومی اشیای
intپایتون.ساختار
PyLongLayoutرا ببینید.تابع نباید نه پیش از مقداردهی اولیه پایتون و نه پس از نهاییسازی پایتون فراخوانی شود. چیدمان بازگرداندهشده تا زمان نهاییسازی پایتون معتبر است. چیدمان برای همه زیرمفسرهای پایتون در یک فرایند یکسان است و بنابراین میتوان آن را در نهانگاه ذخیره کرد.
-
struct PyLongExport¶
اکسپورت یک شیء
intپایتون.دو حالت وجود دارد:
اگر
digitsبرابر باNULLباشد، فقط از عضوvalueاستفاده کنید.اگر
digitsبرابرNULLنباشد، از اعضایnegative،ndigitsوdigitsاستفاده کنید.
-
int64_t value¶
مقدار عدد صحیح بومی شیء
intاکسپورتشده. تنها در صورتی معتبر است کهdigitsبرابرNULLباشد.
-
uint8_t negative¶
1اگر عدد منفی باشد، در غیر این صورت0. تنها زمانی معتبر است کهdigitsبرابرNULLنباشد.
-
Py_ssize_t ndigits¶
تعداد ارقام در آرایهی
digits. تنها زمانی معتبر است کهdigitsبرابرNULLنباشد.
-
const void *digits¶
آرایهی فقط خواندنی از ارقام بدون علامت. میتواند
NULLباشد.
-
int PyLong_Export(PyObject *obj, PyLongExport *export_long)¶
یک شیء
intپایتون را اکسپورت (export) میکند.export_long باید به یک ساختار
PyLongExportکه توسط فراخواننده تخصیص دادهشده است اشاره کند. این نبایدNULLباشد.در صورت موفقیت، *export_long را پر میکند و
0برمیگرداند. در صورت خطا، یک استثنا تنظیم میکند و-1برمیگرداند.PyLong_FreeExport()باید زمانی فراخوانی شود که اکسپورت (export) دیگر مورد نیاز نیست.این تابع همیشه موفق میشود اگر obj یک شیء
intپایتون یا زیرکلاسی از آن باشد.
-
void PyLong_FreeExport(PyLongExport *export_long)¶
آزاد کردن اکسپورت (export) export_long که توسط
PyLong_Export()ایجاد شده است.فراخوانی
PyLong_FreeExport()در صورتی که export_long->digits برابرNULLباشد، اختیاری است.
APIی PyLongWriter¶
میتوان از API PyLongWriter برای ایمپورت کردن یک عدد صحیح استفاده کرد.
اضافه شده در نسخهی 3.14.
-
struct PyLongWriter¶
یک نمونه نویسندهی
intپایتون.نمونه باید توسط
PyLongWriter_Finish()یاPyLongWriter_Discard()نابود شود.
-
PyLongWriter *PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits)¶
یک
PyLongWriterایجاد کنید.در صورت موفقیت، *digits تخصیص داده میشود و یک نویسنده برگردانده میشود. در صورت خطا، یک استثنا تنظیم میشود و
NULLبرگردانده میشود.negative در صورت منفی بودن عدد برابر
1و در غیر این صورت برابر0است.ndigits تعداد ارقام در آرایه digits است. باید بزرگتر از ۰ باشد.
digits نباید NULL باشد.
پس از فراخوانی موفق این تابع، فراخوانیکننده باید آرایهی ارقام digits را پر کند و سپس
PyLongWriter_Finish()را فراخوانی کند تا یکintپایتونی به دست آورد. چیدمان digits توسطPyLong_GetNativeLayout()توصیف میشود.رقمها باید در بازهی [
0;(1 << bits_per_digit) - 1] باشند (که در آنbits_per_digitتعداد بیتهای هر رقم است). هر رقم مرتبهبالا که استفاده نشده باشد، باید برابر0قرار داده شود.بهطور جایگزین، میتوانید
PyLongWriter_Discard()را فراخوانی کنید تا نمونهی نویسنده را بدون ایجاد شیءintنابود کنید.
-
PyObject *PyLongWriter_Finish(PyLongWriter *writer)¶
- مقدار بازگشتی: مرجع جدید.
یک
PyLongWriterایجادشده توسطPyLongWriter_Create()را نهایی کنید.در صورت موفقیت، یک شیء
intپایتون برمیگرداند. در صورت خطا، یک استثنا تنظیم کرده وNULLرا برمیگرداند.این تابع نرمالسازی ارقام را انجام میدهد و در صورت نیاز، شیء را به یک عدد صحیح فشرده تبدیل میکند.
نمونهی نوشتارگر و آرایهی digits پس از فراخوانی نامعتبر میشوند.
-
void PyLongWriter_Discard(PyLongWriter *writer)¶
یک
PyLongWriterایجادشده توسطPyLongWriter_Create()را دور بیندازید.اگر writer برابر
NULLباشد، هیچ عملیاتی انجام نمیشود.نمونهی نوشتارگر و آرایهی digits پس از فراخوانی نامعتبر میشوند.
API منسوخ¶
این ماکروها بهنرمی منسوخ هستند. آنها پارامترهای نمایش داخلی نمونههای PyLongObject را توصیف میکنند.
بهجای آن از PyLong_GetNativeLayout() استفاده کنید، همراه با PyLong_Export() برای خواندن دادههای عدد صحیح یا PyLongWriter برای نوشتن آن. اینها در حال حاضر از همان چیدمان استفاده میکنند، اما بهگونهای طراحی شدهاند که حتی اگر نمایش داخلی اعداد صحیح در سیپایتون تغییر کند، همچنان بهدرستی کار کنند.
-
PyLong_SHIFT¶
این معادل
bits_per_digitدر خروجیPyLong_GetNativeLayout()است.
-
PyLong_BASE¶
این در حال حاضر معادل 1 << PyLong_SHIFT است.
-
PyLong_MASK¶
این در حال حاضر معادل (1 << PyLong_SHIFT) - 1 است