شیءهای تابع¶
چند تابع وجود دارند که مختص توابع پایتون هستند.
-
type PyFunctionObject¶
ساختار C استفادهشده برای توابع.
In the free-threaded build, direct access to mutable fields requires
synchronization if another thread may modify the function. See
پشتیبانی افزونههای C API از نخبندی آزاد.
-
PyTypeObject PyFunction_Type¶
این نمونهای از PyTypeObject است و نوع تابع پایتون را نمایندگی میکند. این نوع به برنامهنویسان پایتون به صورت types.FunctionType در دسترس قرار گرفته است.
-
int PyFunction_Check(PyObject *o)¶
اگر o یک شیء تابع باشد (نوع PyFunction_Type را داشته باشد)، true را برمیگرداند. پارامتر نباید NULL باشد. این تابع همیشه با موفقیت انجام میشود.
-
PyObject *PyFunction_New(PyObject *code, PyObject *globals)¶
- مقدار بازگشتی: مرجع جدید.
شیء تابع جدیدی مرتبط با شیء کد code را برمیگرداند. globals باید دیکشنریای شامل متغیرهای سراسری قابل دسترس برای تابع باشد.
رشته مستند و نام تابع از شیء کد بازیابی میشوند. __module__ از globals بازیابی میشود. مقادیر پیشفرض آرگومانها، حاشیهنویسیها و بستار به NULL تنظیم میشوند. __qualname__ به همان مقدار فیلد co_qualname شیء کد تنظیم میشود.
-
PyObject *PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)¶
- مقدار بازگشتی: مرجع جدید.
مانند PyFunction_New() است، اما بهعلاوه امکان تنظیم ویژگی __qualname__ شیء تابع را نیز فراهم میکند. qualname باید یک شیء یونیکد یا NULL باشد؛ اگر NULL باشد، ویژگی __qualname__ به همان مقدار فیلد co_qualname شیء کد تنظیم میشود.
-
PyObject *PyFunction_GetCode(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
شیء کدِ مرتبط با شیء تابع op را برمیگرداند.
-
PyObject *PyFunction_GetGlobals(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
دیکشنری سراسری مرتبط با شیء تابع op را برمیگرداند.
-
PyObject *PyFunction_GetModule(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
یک ارجاع امانتی به ویژگی __module__ از شیء تابع op برمیگرداند. میتواند NULL باشد.
این بهطور معمول یک رشته حاوی نام ماژول است، اما میتواند توسط کد پایتون به هر شیء دیگری تنظیم شود.
In the free-threaded build, if the attribute may be modified concurrently,
convert the borrowed reference to a strong reference with Py_XNewRef()
immediately, before calling any other Python API. The same applies to
PyFunction_GET_MODULE().
-
PyObject *PyFunction_GetDefaults(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
مقادیر پیشفرض آرگومانهای شیء تابع op را برمیگرداند. این میتواند یک تاپل از آرگومانها یا NULL باشد.
-
int PyFunction_SetDefaults(PyObject *op, PyObject *defaults)¶
مقادیر پیشفرض آرگومانها را برای شیء تابع op تنظیم میکند. defaults باید Py_None یا یک تاپل باشد.
در صورت شکست، SystemError ایجاد میکند و -1 را برمیگرداند.
-
void PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall)¶
فیلد vectorcall از شیء تابع دادهشده func را تنظیم میکند.
هشدار: ماژولهای توسعهای که از این API استفاده میکنند، باید رفتار تابع vectorcall دستنخورده (پیشفرض) را حفظ کنند!
اضافه شده در نسخهی 3.12.
-
PyObject *PyFunction_GetKwDefaults(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
مقادیر پیشفرض آرگومانهای فقطکلیدواژهای شیء تابع op را برمیگرداند. این میتواند یک دیکشنری از آرگومانها یا NULL باشد.
-
int PyFunction_SetKwDefaults(PyObject *op, PyObject *defaults)¶
مقادیر پیشفرض آرگومانهای فقط کلیدواژهای شیء تابع op را تنظیم میکند. defaults باید یک دیکشنری از آرگومانهای فقط کلیدواژهای یا Py_None باشد.
این تابع در صورت موفقیت 0 را برمیگرداند و در صورت شکست -1 را همراه با تنظیم یک استثنا برمیگرداند.
-
PyObject *PyFunction_GetClosure(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
بستار مرتبط با شیء تابع op را برمیگرداند. این میتواند NULL یا تاپلی از شیءهای سلولی (cell objects) باشد.
-
int PyFunction_SetClosure(PyObject *op, PyObject *closure)¶
بستار مرتبط با شیء تابع op را تنظیم میکند. closure باید Py_None یا تاپلی از اشیاء سلول باشد.
در صورت شکست، SystemError ایجاد میکند و -1 را برمیگرداند.
-
PyObject *PyFunction_GetAnnotations(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
حاشیهنویسیهای شیء تابع op را برمیگرداند. این میتواند یک دیکشنری تغییرپذیر یا NULL باشد.
-
int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)¶
حاشیهنویسیهای شیء تابع op را تنظیم میکند. annotations باید یک دیکشنری یا Py_None باشد.
در صورت شکست، SystemError ایجاد میکند و -1 را برمیگرداند.
-
PyObject *PyFunction_GET_CODE(PyObject *op)¶
-
PyObject *PyFunction_GET_GLOBALS(PyObject *op)¶
-
PyObject *PyFunction_GET_MODULE(PyObject *op)¶
-
PyObject *PyFunction_GET_DEFAULTS(PyObject *op)¶
-
PyObject *PyFunction_GET_KW_DEFAULTS(PyObject *op)¶
-
PyObject *PyFunction_GET_CLOSURE(PyObject *op)¶
-
PyObject *PyFunction_GET_ANNOTATIONS(PyObject *op)¶
- مقدار بازگشتی: مرجع امانتی.
این توابع مشابه همتایان PyFunction_Get* خود هستند، اما بررسی نوع انجام نمیدهند. ارسال هر چیزی غیر از نمونهای از PyFunction_Type رفتار تعریفنشده است.
-
int PyFunction_AddWatcher(PyFunction_WatchCallback callback)¶
callback را بهعنوان ناظر تابع برای مفسر جاری ثبت میکند. شناسهای برمیگرداند که میتوان آن را به PyFunction_ClearWatcher() پاس داد. در صورت بروز خطا (مثلاً وقتی دیگر شناسه ناظری در دسترس نباشد)، مقدار -1 را برمیگرداند و یک استثنا تنظیم میکند.
اضافه شده در نسخهی 3.12.
-
int PyFunction_ClearWatcher(int watcher_id)¶
دیدهبان (watcher) شناساییشده توسط watcher_id که پیشتر از PyFunction_AddWatcher() برای مفسر فعلی برگردانده شده است را حذف میکند. در صورت موفقیت 0 را برمیگرداند، یا در صورت خطا -1 را برمیگرداند و یک استثنا تنظیم میکند (مثلاً اگر watcher_id دادهشده هرگز ثبت نشده باشد.)
اضافه شده در نسخهی 3.12.
-
type PyFunction_WatchEvent¶
فهرست رویدادهای ممکن ناظر تابع (function watcher):
PyFunction_EVENT_CREATE
PyFunction_EVENT_DESTROY
PyFunction_EVENT_MODIFY_CODE
PyFunction_EVENT_MODIFY_DEFAULTS
PyFunction_EVENT_MODIFY_KWDEFAULTS
اضافه شده در نسخهی 3.12:
اضافه شده در نسخهی 3.15.
-
PY_FOREACH_FUNC_EVENT(V)¶
کلاندستور V را روی هر پسوند از ثابتهای PyFunction_WatchEvent اعمال کنید. در حال حاضر به V(CREATE) V(DESTROY) V(MODIFY_CODE) V(MODIFY_DEFAULTS) V(MODIFY_KWDEFAULTS) V(MODIFY_QUALNAME) گسترش مییابد. کلاندستور V باید یک نام رویداد را بپذیرد و هرگونه علائم نگارشی مورد نیاز بین گسترشها را فراهم کند.
-
typedef int (*PyFunction_WatchCallback)(PyFunction_WatchEvent event, PyFunctionObject *func, PyObject *new_value)¶
نوع تابع کالبک دیدهبان (watcher) تابع.
اگر event برابر PyFunction_EVENT_CREATE یا PyFunction_EVENT_DESTROY باشد، new_value برابر NULL خواهد بود. در غیر این صورت، new_value حاوی یک borrowed reference به مقدار جدیدی خواهد بود که قرار است در func برای ویژگیای که در حال تغییر است ذخیره شود.
کالبک میتواند func را بررسی کند اما نباید آن را تغییر دهد؛ انجام این کار میتواند پیامدهای غیرقابل پیشبینی، از جمله بازگشتی بینهایت، داشته باشد.
اگر event برابر PyFunction_EVENT_CREATE باشد، کالبک پس از آنکه func بهطور کامل مقداردهی اولیهشده باشد فراخوانی میشود. در غیر این صورت، کالبک پیش از اعمال تغییر روی func فراخوانی میشود، بهطوریکه بتوان وضعیت پیشین func را بررسی کرد. رانتایم مجاز است در صورت امکان، ایجاد اشیاء تابع را با بهینهسازی حذف کند. در چنین مواردی هیچ رویدادی منتشر نخواهد شد. اگرچه این امر امکان بروز تفاوت قابل مشاهده در رفتار رانتایم بسته به تصمیمات بهینهسازی را ایجاد میکند، اما معناشناسی کد پایتون در حال اجرا را تغییر نمیدهد.
اگر event برابر با PyFunction_EVENT_DESTROY باشد، گرفتن یک ارجاع در فراخوانی بازگشتی به تابعی که در حال نابود شدن است، آن را احیا کرده و مانع از آزاد شدن آن در این مرحله میشود. هنگامی که شیء احیا شده بعداً نابود شود، هر گونه کالبک دیدهبان (watcher) که در آن زمان فعال باشد دوباره فراخوانی خواهد شد.
اگر کالبک استثنایی تنظیم کند، باید -1 را بازگرداند؛ این استثنا با استفاده از PyErr_WriteUnraisable() بهعنوان یک استثنای غیرقابل برافراشتن (unraisable) چاپ خواهد شد. در غیر این صورت باید 0 را بازگرداند.
ممکن است هنگام ورود به کالبک، از قبل یک استثنای معلق تنظیمشده باشد. در این حالت، کالبک باید 0 را برگرداند در حالی که همان استثنا همچنان تنظیمشده است. این بدان معناست که کالبک نباید هیچ API دیگری را که میتواند استثنا تنظیم کند فراخوانی کند، مگر آنکه ابتدا وضعیت استثنا را ذخیره و پاک کند و پیش از بازگشت، آن را بازگردانی کند.
اضافه شده در نسخهی 3.12.
©
حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به
تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا
اشکالی یافتید؟
ساخته شده با
Sphinx 9.1.0.