واژه‌نامه

>>>

اعلان پیش‌فرض پایتون در پوستهٔ تعاملی. اغلب برای نمونه‌های کدی دیده می‌شود که می‌توان آن‌ها را به‌صورت تعاملی در مفسر اجرا کرد.

...

می‌تواند به موارد زیر اشاره کند:

  • اعلان پیش‌فرض پایتون در پوستهٔ تعاملی هنگام وارد کردن کد برای یک بلوک کد تورفته، زمانی که درون یک جفت جداکنندهٔ چپ و راست متناظر (پرانتزها، کروشه‌ها، آکولادها یا علامت‌های نقل‌قول سه‌گانه) قرار دارید، یا پس از مشخص کردن یک دکوراتور.

  • شکل سه‌نقطه‌ای شیء Ellipsis.

کلاس پایهٔ انتزاعی

کلاس‌های پایهٔ انتزاعی با فراهم کردن روشی برای تعریف رابط‌ها، زمانی که تکنیک‌های دیگری مانند hasattr() دست‌وپاگیر یا به‌طور ضمنی نادرست هستند (برای مثال با magic methodsنوع‌دهی اردکی را تکمیل می‌کنند. ABCها زیرکلاس‌های مجازی معرفی می‌کنند، که کلاس‌هایی هستند که از یک کلاس دیگر به ارث نمی‌برند اما همچنان توسط isinstance() و issubclass() شناخته می‌شوند؛ مستندات ماژول abc را ببینید. پایتون همراه با ABCهای توکار بسیاری برای ساختارهای داده (در ماژول collections.abc)، اعداد (در ماژول numbers)، جریان‌ها (در ماژول io)، یابنده‌ها و بارگذارهای ایمپورت (در ماژول importlib.abc) ارائه می‌شود. شما می‌توانید ABCهای سفارشی خود را با ماژول abc ایجاد کنید.

توابع حاشیه‌گذاری

فراخوانی‌پذیری که می‌توان آن را برای بازیابی حاشیه‌گذاری یک شیء فراخوانی کرد. توابع حاشیه‌گذاری معمولاً تابع هستند که به‌صورت خودکار به‌عنوان ویژگی __annotate__ توابع، کلاس‌ها و ماژول‌ها تولید می‌شوند. توابع حاشیه‌گذاری زیرمجموعه‌ای از تابع ارزیابی هستند.

حاشیه‌گذاری

برچسبی مرتبط با یک متغیر، یک ویژگی کلاس، یا یک پارامتر تابع یا مقدار بازگشتی، که طبق قرارداد به‌عنوان یک راهنمای نوع استفاده می‌شود.

حاشیه‌گذاری‌های متغیرهای محلی را نمی‌توان در زمان ران‌تایم دسترسی کرد، اما حاشیه‌گذاری‌های متغیرهای سراسری، ویژگی‌های کلاس و توابع را می‌توان با فراخوانی annotationlib.get_annotations() به‌ترتیب روی ماژول‌ها، کلاس‌ها و توابع بازیابی کرد.

همچنین به حاشیه‌نویسی متغیر، حاشیه‌گذاری تابع، PEP 484، PEP 526 و PEP 649 مراجعه کنید که این قابلیت را توضیح می‌دهند. همچنین برای بهترین روش‌ها در کار با حاشیه‌گذاری‌ها، Annotations Best Practices را ببینید.

آرگومان

مقداری که هنگام فراخوانی یک تابع (یا متد) به آن تابع ارسال می‌شود. دو نوع آرگومان وجود دارد:

  • keyword argument: آرگومانی که در فراخوانی تابع با یک شناسه (برای مثال name=) پیش از آن قرار گرفته است، یا به‌عنوان مقداری در یک دیکشنری که پیش از آن ** آمده است، ارسال می‌شود. برای مثال، 3 و 5 هر دو در فراخوانی‌های زیر از complex() آرگومان کلیدواژه‌ای هستند:

    complex(real=3, imag=5)
    complex(**{'real': 3, 'imag': 5})
    
  • positional argument: آرگومانی که آرگومان کلیدواژه‌ای نیست. آرگومان‌های جایگاهی می‌توانند در ابتدای یک فهرست آرگومان ظاهر شوند و/یا به‌عنوان عناصر یک تکرارپذیر که پیش از آن * آمده است، ارسال شوند. برای مثال، 3 و 5 هر دو در فراخوانی‌های زیر آرگومان جایگاهی هستند:

    complex(3, 5)
    complex(*(3, 5))
    

آرگومان‌ها به متغیرهای محلی نام‌گذاری‌شده در بدنهٔ یک تابع اختصاص داده می‌شوند. برای قوانین حاکم بر این تخصیص، بخش Calls را ببینید. از نظر سینتکس، هر عبارتی می‌تواند برای نمایش یک آرگومان استفاده شود؛ مقدار ارزیابی‌شده به متغیر محلی اختصاص داده می‌شود.

همچنین به ورودی واژه‌نامه‌ای پارامتر، پرسش متداول دربارهٔ تفاوت بین آرگومان‌ها و پارامترها و PEP 362 مراجعه کنید.

مدیر زمینهٔ ناهمگام

شی‌ءای که با تعریف متدهای __aenter__() و __aexit__()، محیط مشاهده‌شده در یک دستور async with را کنترل می‌کند. این قابلیت توسط PEP 492 معرفی شد.

تولیدگر ناهمگام

تابعی که یک تکرارگر تولیدگر ناهمگام بازمی‌گرداند. این تابع شبیه یک تابع هم‌روال که با async def تعریف شده است به نظر می‌رسد، با این تفاوت که شامل عبارت‌های yield برای تولید مجموعه‌ای از مقادیر قابل استفاده در یک حلقهٔ async for است.

معمولاً به یک تابع تولیدگر ناهمگام اشاره دارد، اما در برخی زمینه‌ها ممکن است به یک تکرارگر تولیدگر ناهمگام اشاره کند. در مواردی که معنای مورد نظر واضح نیست، استفاده از اصطلاحات کامل از ابهام جلوگیری می‌کند.

یک تابع تولیدگر ناهمگام ممکن است علاوه بر عبارت‌های async for و دستورهای async with، شامل عبارت‌های await نیز باشد.

تکرارگر تولیدگر ناهمگام

شی‌ءای که توسط یک تابع تولیدگر ناهمگام ایجاد می‌شود.

این یک تکرارگر ناهمگام است که هنگام فراخوانی با استفاده از متد __anext__()، یک شیء awaitable بازمی‌گرداند که بدنهٔ تابع تولیدگر ناهمگام را تا عبارت yield بعدی اجرا خواهد کرد.

هر yield پردازش را به‌طور موقت متوقف می‌کند و وضعیت اجرا (شامل متغیرهای محلی و دستورهای try در انتظار) را به خاطر می‌سپارد. هنگامی که تکرارگر تولیدگر ناهمگام عملاً با یک شیء awaitable دیگر که توسط __anext__() بازگردانده شده است ادامه می‌یابد، از همان نقطه‌ای که متوقف شده بود ادامه می‌دهد. PEP 492 و PEP 525 را ببینید.

تکرارپذیر ناهمگام

شی‌ءای که می‌تواند در یک دستور async for استفاده شود. باید از متد __aiter__() خود یک تکرارگر ناهمگام بازگرداند. این قابلیت توسط PEP 492 معرفی شد.

تکرارگر ناهمگام

شی‌ءای که متدهای __aiter__() و __anext__() را پیاده‌سازی می‌کند. __anext__() باید یک شیء awaitable بازگرداند. async for اشیای awaitable بازگردانده‌شده توسط متد __anext__() یک تکرارگر ناهمگام را تا زمانی که یک استثنای StopAsyncIteration پرتاب شود، حل می‌کند. این قابلیت توسط PEP 492 معرفی شد.

عملیات اتمی

عملیاتی که به نظر می‌رسد به‌عنوان یک گام واحد و تقسیم‌ناپذیر اجرا می‌شود: هیچ نخٔ دیگری نمی‌تواند اجرای ناقص آن را مشاهده کند و اثرات آن یکباره قابل مشاهده می‌شوند. پایتون تضمین نمی‌کند که دستورهای سطح بالا اتمی باشند (برای مثال، x += 1 چندین عملیات بایت‌کد انجام می‌دهد و اتمی نیست). اتمی بودن فقط در مواردی تضمین می‌شود که به‌صراحت مستند شده باشند. همچنین شرط رقابت و رقابت داده را ببینید.

وضعیت نخٔ متصل

یک وضعیت نخٔ اجرایی که برای نخٔ فعلی سیستم‌عامل فعال است.

هنگامی که یک وضعیت نخٔ اجرایی متصل است، نخٔ سیستم‌عامل به تمام API زبان C پایتون دسترسی دارد و می‌تواند به‌طور ایمن مفسر بایت‌کد را فراخوانی کند.

مگر این‌که یک تابع به‌طور صریح خلاف آن را ذکر کند، تلاش برای فراخوانی API زبان C بدون یک وضعیت نخٔ متصل، به یک خطای مهلک یا رفتار تعریف‌نشده منجر خواهد شد. یک وضعیت نخ می‌تواند به‌صورت صریح توسط کاربر از طریق API زبان C متصل و جدا شود، یا به‌صورت ضمنی توسط ران‌تایم، از جمله در طول فراخوانی‌های C مسدودکننده و توسط مفسر بایت‌کد در بین فراخوانی‌ها، مدیریت شود.

در بیشتر ساخت‌های پایتون، داشتن یک وضعیت نخٔ متصل به این معناست که فراخواننده GIL را برای مفسر فعلی در اختیار دارد، بنابراین در یک لحظهٔ مشخص فقط یک نخٔ سیستم‌عامل می‌تواند یک وضعیت نخٔ متصل داشته باشد. در ساخت نخ‌آزاد پایتون، نخ‌ها می‌توانند به‌طور هم‌زمان وضعیت نخٔ متصل داشته باشند، که امکان موازی‌سازی واقعی مفسر بایت‌کد را فراهم می‌کند.

ویژگی

مقداری مرتبط با یک شیء که معمولاً با استفاده از عبارت‌های نقطه‌ای و با نام به آن ارجاع داده می‌شود. برای مثال، اگر یک شیء o دارای یک ویژگی a باشد، با o.a به آن ارجاع داده خواهد شد.

اگر شیء اجازه دهد، می‌توان با استفاده از setattr()، ویژگی‌ای با نامی که یک شناسه مطابق تعریف Names (identifiers and keywords) نیست به آن اختصاص داد. چنین ویژگی‌ای با استفاده از یک عبارت نقطه‌ای قابل دسترسی نخواهد بود و باید در عوض با getattr() بازیابی شود.

awaitable

شیءای که می‌تواند در یک عبارت await استفاده شود. می‌تواند یک هم‌روال یا شی‌ءای با متد __await__() باشد. همچنین PEP 492 را ببینید.

BDFL

Benevolent Dictator For Life، نام دیگر Guido van Rossum، خالق پایتون.

فایل دودویی

یک شیء فایل که می‌تواند شیء شبه‌بایت را بخواند و بنویسد. نمونه‌هایی از فایل‌های دودویی، فایل‌هایی هستند که در حالت دودویی باز شده‌اند ('rb'، 'wb' یا 'rb+'sys.stdin.buffer، sys.stdout.buffer و نمونه‌هایی از io.BytesIO و gzip.GzipFile.

همچنین فایل متنی را برای یک شیء فایل که می‌تواند اشیای str را بخواند و بنویسد ببینید.

ارجاع قرض‌گرفته‌شده

در API زبان C پایتون، ارجاع قرض‌گرفته‌شده ارجاعی به یک شیء است که در آن کدی که از شیء استفاده می‌کند مالک ارجاع نیست. اگر شیء نابود شود، این ارجاع به یک اشاره‌گر آویزان تبدیل می‌شود. برای مثال، جمع‌آوری زباله می‌تواند آخرین ارجاع قوی به شیء را حذف کند و در نتیجه آن را نابود کند.

فراخوانی Py_INCREF() روی ارجاع قرض‌گرفته‌شده توصیه می‌شود تا آن را درجا به یک ارجاع قوی تبدیل کند، مگر زمانی که شیء نمی‌تواند پیش از آخرین استفاده از ارجاع قرض‌گرفته‌شده نابود شود. تابع Py_NewRef() می‌تواند برای ایجاد یک ارجاع قوی جدید استفاده شود.

شیء شبه‌بایت

شی‌ءای که از Buffer Protocol پشتیبانی می‌کند و می‌تواند یک بافر C-پیوسته صادر کند. این شامل همهٔ اشیای bytes، bytearray و array.array و همچنین بسیاری از اشیای رایج memoryview می‌شود. اشیای شبه‌بایت می‌توانند برای عملیات مختلفی که با داده‌های دودویی کار می‌کنند استفاده شوند؛ از جمله فشرده‌سازی، ذخیره در یک فایل دودویی و ارسال از طریق یک سوکت.

برخی عملیات‌ها نیاز دارند که داده‌های دودویی تغییرپذیر باشند. مستندات اغلب به این موارد با عنوان «اشیای شبه‌بایت خواندن-نوشتن» اشاره می‌کنند. نمونه‌هایی از اشیای بافر تغییرپذیر شامل bytearray و یک memoryview از یک bytearray هستند. عملیات‌های دیگر نیاز دارند که داده‌های دودویی در اشیای تغییرناپذیر ذخیره شوند («اشیای شبه‌بایت فقط‌خواندنی»)؛ نمونه‌هایی از این موارد شامل bytes و یک memoryview از یک شیء bytes هستند.

بایت‌کد

کد منبع پایتون به بایت‌کد کامپایل می‌شود؛ بایت‌کد نمایش داخلی یک برنامهٔ پایتون در مفسر CPython است. بایت‌کد همچنین در فایل‌های .pyc ذخیره می‌شود تا اجرای همان فایل در بار دوم سریع‌تر باشد (می‌توان از کامپایل دوباره از منبع به بایت‌کد جلوگیری کرد). گفته می‌شود این «زبان میانی» روی یک ماشین مجازی اجرا می‌شود که کد ماشین متناظر با هر بایت‌کد را اجرا می‌کند. توجه داشته باشید که انتظار نمی‌رود بایت‌کدها بین ماشین‌های مجازی مختلف پایتون کار کنند یا بین نسخه‌های مختلف پایتون پایدار باشند.

فهرستی از دستورهای بایت‌کد را می‌توان در مستندات the dis module یافت.

فراخوانی‌پذیر

یک فراخوانی‌پذیر شی‌ءای است که می‌توان آن را، احتمالاً با مجموعه‌ای از آرگومان‌ها (به آرگومان مراجعه کنید)، با سینتکس زیر فراخوانی کرد:

callable(argument1, argument2, argumentN)

یک تابع و به‌تبع آن یک متد، یک فراخوانی‌پذیر است. یک نمونه از یک کلاس که متد __call__() را پیاده‌سازی می‌کند نیز یک فراخوانی‌پذیر است.

کال‌بک

یک تابع زیرروال که به‌عنوان آرگومان ارسال می‌شود تا در نقطه‌ای در آینده اجرا شود.

کلاس

الگویی برای ایجاد اشیای تعریف‌شده توسط کاربر. تعریف‌های کلاس معمولاً شامل تعریف‌های متد هستند که روی نمونه‌های کلاس عمل می‌کنند.

متغیر کلاس

متغیری که در یک کلاس تعریف شده است و قرار است فقط در سطح کلاس تغییر داده شود (یعنی نه در یک نمونه از کلاس).

متغیر بستار

یک متغیر آزاد که از یک محدودهٔ تو‌در‌تو ارجاع داده می‌شود و در یک محدودهٔ بیرونی تعریف شده است، به‌جای این‌که در زمان ران‌تایم از نام‌فضاهای سراسری یا توکار حل شود. ممکن است به‌طور صریح با کلیدواژهٔ nonlocal تعریف شود تا امکان دسترسی نوشتن فراهم شود، یا اگر متغیر فقط خوانده می‌شود، به‌طور ضمنی تعریف شود.

برای مثال، در تابع inner در کد زیر، هر دو مورد x و print متغیر آزاد هستند، اما فقط x یک متغیر بستار است:

def outer():
    x = 0
    def inner():
        nonlocal x
        x += 1
        print(x)
    return inner

به‌دلیل ویژگی codeobject.co_freevars (که با وجود نامش، فقط نام‌های متغیرهای بستار را شامل می‌شود و همهٔ متغیرهای آزاد ارجاع‌داده‌شده را فهرست نمی‌کند)، اصطلاح کلی‌تر متغیر آزاد گاهی حتی زمانی استفاده می‌شود که معنای مورد نظر به‌طور مشخص اشاره به متغیرهای بستار دارد.

عدد مختلط

گسترشی از سیستم آشنای اعداد حقیقی که در آن همهٔ اعداد به‌صورت مجموع یک بخش حقیقی و یک بخش موهومی بیان می‌شوند. اعداد موهومی مضرب‌های حقیقی واحد موهومی (ریشهٔ دوم -1) هستند که در ریاضیات اغلب با i و در مهندسی با j نوشته می‌شود. پایتون پشتیبانی توکار از اعداد مختلط دارد که با این نمادگذاری اخیر نوشته می‌شوند؛ بخش موهومی با پسوند j نوشته می‌شود، برای مثال 3+1j. برای دسترسی به معادل‌های مختلط ماژول math، از cmath استفاده کنید. استفاده از اعداد مختلط یک ویژگی نسبتاً پیشرفتهٔ ریاضی است. اگر از نیاز به آن‌ها آگاه نیستید، تقریباً قطعی است که می‌توانید با خیال راحت آن‌ها را نادیده بگیرید.

هم‌زمانی

توانایی یک برنامهٔ کامپیوتری برای انجام چندین کار در یک زمان. پایتون کتابخانه‌هایی برای نوشتن برنامه‌هایی که از شکل‌های مختلف هم‌زمانی استفاده می‌کنند فراهم می‌کند. asyncio کتابخانه‌ای برای کار با وظایف ناهمگام و coroutineها است. threading دسترسی به نخ‌های سیستم‌عامل و multiprocessing دسترسی به پردازه‌های سیستم‌عامل را فراهم می‌کنند. پردازنده‌های چند‌هسته‌ای می‌توانند نخ‌ها و پردازه‌ها را روی هسته‌های مختلف CPU به‌طور هم‌زمان اجرا کنند (به موازی‌سازی مراجعه کنید).

تغییر هم‌زمان

هنگامی که چندین نخ در یک زمان داده‌های اشتراکی را تغییر می‌دهند. تغییر هم‌زمان بدون همگام‌سازی مناسب می‌تواند باعث شرط رقابت شود و همچنین ممکن است یک رقابت داده، خرابی داده یا هر دو را ایجاد کند.

زمینه

این اصطلاح بسته به محل و نحوهٔ استفاده، معانی متفاوتی دارد. برخی از معانی رایج:

پروتکل مدیریت زمینه

متدهای __enter__() و __exit__() که توسط دستور with فراخوانی می‌شوند. PEP 343 را ببینید.

مدیر زمینه

شی‌ءای که پروتکل مدیریت زمینه را پیاده‌سازی می‌کند و محیط مشاهده‌شده در یک دستور with را کنترل می‌کند. PEP 343 را ببینید.

متغیر زمینه

متغیری که مقدار آن به این بستگی دارد که کدام زمینه زمینه فعلی است. مقادیر از طریق اشیای contextvars.ContextVar قابل دسترسی هستند. متغیرهای زمینه عمدتاً برای جداسازی وضعیت بین وظایف ناهمگام هم‌زمان استفاده می‌شوند.

پیوسته

یک بافر دقیقاً پیوسته در نظر گرفته می‌شود اگر یا C-contiguous یا Fortran contiguous باشد. بافرهای صفر‌بعدی هم C و هم Fortran پیوسته هستند. در آرایه‌های یک‌بعدی، آیتم‌ها باید در حافظه در کنار یکدیگر و به‌ترتیب اندیس‌های افزایشی که از صفر شروع می‌شوند قرار گرفته باشند. در آرایه‌های چندبعدی C-contiguous، هنگام بازدید از آیتم‌ها به‌ترتیب آدرس حافظه، آخرین اندیس سریع‌ترین تغییر را دارد. با این حال، در آرایه‌های Fortran contiguous، اولین اندیس سریع‌ترین تغییر را دارد.

هم‌روال

هم‌روال‌ها شکل کلی‌تری از زیرروال‌ها هستند. زیرروال‌ها از یک نقطه وارد و از نقطه‌ای دیگر خارج می‌شوند. هم‌روال‌ها می‌توانند از نقاط مختلفی وارد، خارج و از سر گرفته شوند. آن‌ها می‌توانند با دستور async def پیاده‌سازی شوند. همچنین PEP 492 را ببینید.

تابع هم‌روال

تابعی که یک شیء هم‌روال بازمی‌گرداند. یک تابع هم‌روال می‌تواند با دستور async def تعریف شود و می‌تواند شامل کلیدواژه‌های await، async for و async with باشد. این موارد توسط PEP 492 معرفی شدند.

CPython

پیاده‌سازی مرجع زبان برنامه‌نویسی پایتون، همان‌طور که در python.org توزیع می‌شود. اصطلاح «CPython» در مواقعی استفاده می‌شود که لازم باشد این پیاده‌سازی از موارد دیگری مانند Jython یا IronPython متمایز شود.

زمینه فعلی

زمینه (contextvars.Context) که در حال حاضر توسط اشیای ContextVar برای دسترسی (دریافت یا تنظیم) مقادیر متغیر زمینه استفاده می‌شود. هر نخ، زمینهٔ فعلی خود را دارد. چارچوب‌های اجرای وظایف ناهمگام (به asyncio مراجعه کنید) هر وظیفه را با یک زمینه مرتبط می‌کنند که هر زمان وظیفه شروع یا ادامهٔ اجرا می‌دهد، به زمینهٔ فعلی تبدیل می‌شود.

جدایهٔ چرخه‌ای

زیرگروهی شامل یک یا چند شیء که در یک چرخهٔ ارجاع به یکدیگر ارجاع می‌دهند، اما توسط اشیای خارج از گروه ارجاع داده نمی‌شوند. هدف زباله‌روبی شناسایی این گروه‌ها و شکستن چرخه‌های ارجاع است تا حافظه بتواند بازیابی شود.

رقابت داده

وضعیتی که در آن چندین نخ به یک محل حافظهٔ یکسان به‌طور هم‌زمان دسترسی دارند، دست‌کم یکی از دسترسی‌ها نوشتن است و نخ‌ها برای کنترل دسترسی خود از هیچ همگام‌سازی‌ای استفاده نمی‌کنند. رقابت‌های داده به رفتار غیرقطعی منجر می‌شوند و می‌توانند باعث خرابی داده شوند. استفادهٔ درست از قفل و دیگر اولیه از رقابت‌های داده جلوگیری می‌کند. توجه داشته باشید که رقابت‌های داده فقط در کد بومی رخ می‌دهند، اما آن کد بومی ممکن است در یک API پایتون در معرض استفاده قرار گرفته باشد. همچنین شرط رقابت و ایمن برای نخ‌های اجرایی را ببینید.

بن‌بست

وضعیتی که در آن دو یا چند وظیفه (نخ‌ها، پردازه‌ها یا هم‌روال‌ها) به‌طور نامحدود منتظر می‌مانند تا یکدیگر منابع را آزاد کنند یا اقداماتی را کامل کنند، و در نتیجه هیچ‌کدام نمی‌توانند پیشرفت کنند. برای مثال، اگر نخٔ A قفل ۱ را در اختیار داشته باشد و منتظر قفل ۲ باشد، در حالی که نخٔ B قفل ۲ را در اختیار دارد و منتظر قفل ۱ است، هر دو نخ به‌طور نامحدود منتظر خواهند ماند. در پایتون، این وضعیت اغلب از دریافت چندین قفل با ترتیب‌های ناسازگار یا از وابستگی‌های join/await چرخه‌ای ایجاد می‌شود. می‌توان با همیشه دریافت کردن چندین قفل به یک ترتیب ثابت از بن‌بست‌ها جلوگیری کرد. همچنین قفل و بازورودپذیر را ببینید.

دکوراتور

تابعی که تابع دیگری را بازمی‌گرداند و معمولاً با استفاده از سینتکس @wrapper به‌عنوان یک تبدیل تابع اعمال می‌شود. نمونه‌های رایج دکوراتورها classmethod() و staticmethod() هستند.

سینتکس دکوراتور صرفاً یک قند نحوی (syntactic sugar) است؛ دو تعریف تابع زیر از نظر معنایی معادل هستند:

def f(arg):
    ...
f = staticmethod(f)

@staticmethod
def f(arg):
    ...

همین مفهوم برای کلاس‌ها نیز وجود دارد، اما استفاده از آن در آنجا کمتر رایج است. برای اطلاعات بیشتر دربارهٔ دکوراتورها، مستندات function definitions و class definitions را ببینید.

توصیف‌گر

هر شی‌ءای که متدهای __get__()، __set__() یا __delete__() را تعریف کند. هنگامی که یک ویژگی کلاس یک توصیف‌گر باشد، رفتار اتصال ویژهٔ آن هنگام جست‌وجوی ویژگی فعال می‌شود. معمولاً استفاده از a.b برای دریافت، تنظیم یا حذف یک ویژگی، شیء با نام b را در دیکشنری کلاس a جست‌وجو می‌کند، اما اگر b یک توصیف‌گر باشد، متد مربوط به توصیف‌گر فراخوانی می‌شود. درک توصیف‌گرها کلیدی برای درک عمیق پایتون است، زیرا آن‌ها پایهٔ بسیاری از قابلیت‌ها از جمله توابع، متدها، ویژگی‌ها، متدهای کلاس، متدهای ایستا و ارجاع به کلاس‌های بالادستی هستند.

برای اطلاعات بیشتر دربارهٔ متدهای توصیف‌گرها، Implementing Descriptors یا Descriptor How To Guide را ببینید.

دیکشنری

یک آرایهٔ انجمنی که در آن کلیدهای دلخواه به مقادیر نگاشت می‌شوند. کلیدها می‌توانند هر شیءای باشند که متدهای __hash__() و __eq__() را داشته باشد. در Perl به آن hash گفته می‌شود.

درک دیکشنری

روشی فشرده برای پردازش همه یا بخشی از عناصر یک تکرارپذیر و بازگرداندن یک دیکشنری با نتایج. results = {n: n ** 2 for n in range(10)} یک دیکشنری ایجاد می‌کند که شامل کلید n نگاشت‌شده به مقدار n ** 2 است. Displays for lists, sets and dictionaries را ببینید.

نمای دیکشنری

اشیایی که توسط dict.keys()، dict.values() و dict.items() بازگردانده می‌شوند، نماهای دیکشنری نامیده می‌شوند. آن‌ها نمایی پویا از ورودی‌های دیکشنری فراهم می‌کنند، به این معنا که هنگام تغییر دیکشنری، نما نیز این تغییرات را منعکس می‌کند. برای تبدیل نمای دیکشنری به یک فهرست کامل از list(dictview) استفاده کنید. Dictionary view objects را ببینید.

رشتهٔ مستندات

یک مقدار رشته‌ای که به‌عنوان اولین عبارت در یک کلاس، تابع یا ماژول ظاهر می‌شود. اگرچه هنگام اجرای مجموعه نادیده گرفته می‌شود، توسط کامپایلر شناسایی شده و در ویژگی __doc__ کلاس، تابع یا ماژول دربرگیرنده قرار داده می‌شود. از آنجا که از طریق درون‌بینی در دسترس است، مکان استاندارد برای مستندسازی شیء محسوب می‌شود.

نوع‌دهی اردکی

سبک برنامه‌نویسی‌ای که برای تعیین داشتن رابط مناسب توسط یک شیء، به نوع آن نگاه نمی‌کند؛ در عوض، متد یا ویژگی به‌سادگی فراخوانی یا استفاده می‌شود («اگر شبیه اردک است و مانند اردک صدا می‌دهد، پس باید اردک باشد.»). با تأکید بر رابط‌ها به‌جای نوع‌های خاص، کد با طراحی خوب با امکان جایگزینی چندریخت، انعطاف‌پذیری خود را افزایش می‌دهد. نوع‌دهی اردکی از آزمون‌های مبتنی بر type() یا isinstance() اجتناب می‌کند. (با این حال، توجه داشته باشید که نوع‌دهی اردکی می‌تواند با کلاس پایهٔ انتزاعی تکمیل شود.) در عوض، معمولاً از آزمون‌های hasattr() یا برنامه‌نویسی EAFP استفاده می‌کند.

داندر

یک شکل کوتاه و غیررسمی برای «دو زیرخط» که هنگام صحبت دربارهٔ یک متد ویژه استفاده می‌شود. برای مثال، __init__ اغلب «داندر اینیت» تلفظ می‌شود.

EAFP

آسان‌تر است که درخواست بخشش کنید تا اجازه. این سبک رایج کدنویسی پایتون وجود کلیدها یا ویژگی‌های معتبر را فرض می‌کند و اگر این فرض نادرست باشد، استثناها را دریافت می‌کند. این سبک پاک و سریع با وجود تعداد زیادی دستورهای try و except شناخته می‌شود. این روش در تضاد با سبک LBYL است که در بسیاری از زبان‌های دیگر مانند C رایج است.

تابع ارزیابی

تابعی که می‌توان آن را برای ارزیابی یک ویژگی با ارزیابی تنبل یک شیء فراخوانی کرد، مانند مقدار نام‌های مستعار نوع که با دستور type ایجاد شده‌اند.

عبارت

بخشی از سینتکس که می‌تواند به یک مقدار ارزیابی شود. به بیان دیگر، یک عبارت مجموعه‌ای از عناصر عبارت مانند لفظ‌ها، نام‌ها، دسترسی به ویژگی، عملگرها یا فراخوانی‌های تابع است که همه مقداری بازمی‌گردانند. برخلاف بسیاری از زبان‌های دیگر، همهٔ ساختارهای زبان عبارت نیستند. همچنین دستورهایی وجود دارند که نمی‌توان از آن‌ها به‌عنوان عبارت استفاده کرد، مانند while. تخصیص‌ها نیز دستور هستند، نه عبارت.

ماژول افزونه

ماژول نوشته‌شده به زبان C یا C++ که از API زبان C پایتون برای تعامل با هسته و کد کاربر استفاده می‌کند.

اف‌استرینگ
اف‌استرینگ‌ها

رشته‌های لفظی که با f یا F پیشوندگذاری شده‌اند، معمولاً «اف‌استرینگ» نامیده می‌شوند که کوتاه‌شدهٔ formatted string literals است. همچنین PEP 498 را ببینید.

شیء فایل

شی‌ءای که یک API فایل‌محور (با متدهایی مانند read() یا write()) برای یک منبع زیربنایی ارائه می‌دهد. بسته به نحوهٔ ایجاد آن، یک شیء فایل می‌تواند دسترسی به یک فایل واقعی روی دیسک یا نوع دیگری از فضای ذخیره‌سازی یا دستگاه ارتباطی را مدیریت کند (برای مثال ورودی/خروجی استاندارد، بافرهای درون‌حافظه‌ای، سوکت‌ها، پایپ‌ها و غیره). اشیای فایل همچنین با نام‌های file-like objects یا streams شناخته می‌شوند.

در واقع سه دسته از اشیای فایل وجود دارد: فایل دودویی خام، فایل دودویی بافرشده و فایل متنی. رابط‌های آن‌ها در ماژول io تعریف شده‌اند. روش استاندارد ایجاد یک شیء فایل، استفاده از تابع open() است.

شیء شبه‌فایل

هم‌معنای شیء فایل.

کدگذاری سیستم فایل و مدیریت‌کنندهٔ خطا

کدگذاری و مدیریت‌کنندهٔ خطایی که پایتون برای کدگشایی بایت‌ها از سیستم‌عامل و کدگذاری یونیکد به سیستم‌عامل استفاده می‌کند.

کدگذاری سیستم فایل باید تضمین کند که همهٔ بایت‌های کمتر از ۱۲۸ را با موفقیت کدگشایی می‌کند. اگر کدگذاری سیستم فایل نتواند این تضمین را ارائه دهد، توابع API ممکن است استثنای UnicodeError ایجاد کنند.

از توابع sys.getfilesystemencoding() و sys.getfilesystemencodeerrors() می‌توان برای دریافت کدگذاری سیستم فایل و مدیریت‌کنندهٔ خطا استفاده کرد.

کدگذاری سیستم فایل و مدیریت‌کنندهٔ خطا در هنگام راه‌اندازی پایتون توسط تابع PyConfig_Read() پیکربندی می‌شوند: اعضای filesystem_encoding و filesystem_errors از PyConfig را ببینید.

همچنین کدگذاری محلی را ببینید.

یابنده

شیءای که تلاش می‌کند بارگذار مربوط به ماژولی را که در حال ایمپورت شدن است پیدا کند.

دو نوع یابنده وجود دارد: یابندهٔ مسیر فراداده برای استفاده با sys.meta_path و یابندهٔ ورودی مسیر برای استفاده با sys.path_hooks.

برای جزئیات بسیار بیشتر، Finders and loaders و importlib را ببینید.

تقسیم کف

تقسیم ریاضی که به نزدیک‌ترین عدد صحیح پایین گرد می‌شود. عملگر تقسیم کف // است. برای مثال، عبارت 11 // 4 به 2 ارزیابی می‌شود، در حالی که تقسیم حقیقی با عدد اعشاری مقدار 2.75 را بازمی‌گرداند. توجه داشته باشید که (-11) // 4 برابر -3 است، زیرا -2.75 به سمت پایین گرد می‌شود. PEP 238 را ببینید.

نخ‌گذاری آزاد

مدل نخ‌ای که در آن چندین نخ می‌توانند بایت‌کد پایتون را به‌طور هم‌زمان درون همان مفسر اجرا کنند. این در تضاد با قفل مفسر سراسری است که اجازه می‌دهد فقط یک نخ در هر زمان بایت‌کد پایتون را اجرا کند. PEP 703 را ببینید.

ساخت نخ‌آزاد

ساختی از CPython که از نخ‌گذاری آزاد پشتیبانی می‌کند و با استفاده از گزینهٔ --disable-gil پیش از کامپایل پیکربندی شده است.

Python support for free threading را ببینید.

متغیر آزاد

به‌صورت رسمی، همان‌طور که در language execution model تعریف شده است، یک متغیر آزاد هر متغیری است که در یک نام‌فضا استفاده می‌شود اما در آن نام‌فضا یک متغیر محلی نیست. برای نمونه، متغیر بستار را ببینید. از نظر عملی، به‌دلیل نام ویژگی codeobject.co_freevars، این اصطلاح گاهی به‌عنوان مترادفی برای متغیر بستار نیز استفاده می‌شود.

تابع

مجموعه‌ای از دستورها که مقداری را به یک فراخواننده بازمی‌گرداند. همچنین می‌تواند صفر یا چند آرگومان دریافت کند که ممکن است در اجرای بدنه استفاده شوند. همچنین پارامتر، متد و بخش Function definitions را ببینید.

حاشیه‌گذاری تابع

یک حاشیه‌گذاری برای پارامتر یک تابع یا مقدار بازگشتی.

حاشیه‌گذاری‌های تابع معمولاً برای راهنمای نوع استفاده می‌شوند: برای مثال، انتظار می‌رود این تابع دو آرگومان int دریافت کند و همچنین یک مقدار بازگشتی int داشته باشد:

def sum_two_numbers(a: int, b: int) -> int:
   return a + b

نحو حاشیه‌گذاری تابع در بخش Function definitions توضیح داده شده است.

به حاشیه‌نویسی متغیر و PEP 484 مراجعه کنید که این قابلیت را توضیح می‌دهند. همچنین برای بهترین روش‌ها در کار با حاشیه‌گذاری‌ها، Annotations Best Practices را ببینید.

__future__

یک future statement، یعنی from __future__ import <feature>, به کامپایلر دستور می‌دهد ماژول فعلی را با استفاده از سینتکس یا معناشناسی‌ای کامپایل کند که در یک انتشار آیندهٔ پایتون استاندارد خواهد شد. ماژول __future__ مقادیر ممکن feature را مستند می‌کند. با ایمپورت این ماژول و ارزیابی متغیرهای آن، می‌توانید ببینید چه زمانی یک ویژگی جدید برای اولین بار به زبان اضافه شده است و چه زمانی به حالت پیش‌فرض تبدیل خواهد شد (یا شده است):

>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
زباله‌روبی

فرایند آزادسازی حافظه هنگامی که دیگر استفاده نمی‌شود. پایتون زباله‌روبی را از طریق شمارش ارجاع‌ها و یک زباله‌روب چرخه‌ای که قادر به شناسایی و شکستن چرخه‌های ارجاع است انجام می‌دهد. زباله‌روب را می‌توان با استفاده از ماژول gc کنترل کرد.

تولیدگر

تابعی که یک تکرارگر تولیدگر بازمی‌گرداند. این تابع شبیه یک تابع معمولی است، با این تفاوت که شامل عبارت‌های yield برای تولید مجموعه‌ای از مقادیر قابل استفاده در یک حلقهٔ for یا قابل بازیابی یکی‌یکی با تابع next() است.

معمولاً به یک تابع تولیدگر اشاره دارد، اما در برخی زمینه‌ها ممکن است به یک تکرارگر تولیدگر اشاره کند. در مواردی که معنای مورد نظر واضح نیست، استفاده از اصطلاحات کامل از ابهام جلوگیری می‌کند.

تکرارگر تولیدگر

شیءای که توسط یک تابع تولیدگر ایجاد می‌شود.

هر yield پردازش را به‌طور موقت متوقف می‌کند و وضعیت اجرا (شامل متغیرهای محلی و دستورهای try در انتظار) را به خاطر می‌سپارد. هنگامی که تکرارگر تولیدگر ادامهٔ اجرا می‌دهد، از همان نقطه‌ای که متوقف شده بود ادامه می‌دهد (برخلاف توابع که در هر فراخوانی از ابتدا شروع می‌شوند).

عبارت تولیدگر

یک عبارت که یک تکرارگر بازمی‌گرداند. این عبارت شبیه یک عبارت معمولی است که پس از آن یک بند for برای تعریف متغیر حلقه، محدوده و یک بند اختیاری if قرار گرفته است. عبارت ترکیبی، مقادیری را برای یک تابع دربرگیرنده تولید می‌کند:

>>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
285
تابع عمومی

تابعی که از چندین تابع تشکیل شده است که یک عملیات یکسان را برای نوع‌های مختلف پیاده‌سازی می‌کنند. این‌که هنگام یک فراخوانی کدام پیاده‌سازی استفاده شود، توسط الگوریتم ارسال تعیین می‌شود.

همچنین به ورودی واژه‌نامه‌ای توزیع تک‌گانه، دکوریتور functools.singledispatch() و PEP 443 مراجعه کنید.

نوع عمومی

یک نوع که می‌تواند پارامتری شود؛ معمولاً یک container class مانند list یا dict. برای راهنمای نوع و حاشیه‌گذاری استفاده می‌شود.

برای جزئیات بیشتر، generic alias types، PEP 483، PEP 484، PEP 585 و ماژول typing را ببینید.

GIL

قفل مفسر سراسری را ببینید.

قفل مفسر سراسری

سازوکاری که توسط مفسر CPython استفاده می‌شود تا تضمین کند در هر زمان فقط یک نخ بایت‌کد پایتون را اجرا می‌کند. این کار پیاده‌سازی CPython را ساده‌تر می‌کند، زیرا مدل شیء (شامل نوع‌های توکار مهمی مانند dict) به‌طور ضمنی در برابر دسترسی هم‌زمان ایمن می‌شود. قفل کردن کل مفسر باعث می‌شود چندنخی کردن مفسر آسان‌تر شود، اما به قیمت از دست دادن بخش زیادی از موازی‌سازی‌ای که ماشین‌های چندپردازنده‌ای فراهم می‌کنند.

با این حال، برخی ماژول‌های افزونه، چه استاندارد و چه شخص ثالث، به‌گونه‌ای طراحی شده‌اند که هنگام انجام وظایف محاسباتی سنگین مانند فشرده‌سازی یا درهم‌سازی، GIL را آزاد کنند. همچنین، GIL همیشه هنگام انجام عملیات ورودی/خروجی آزاد می‌شود.

از پایتون ۳.۱۳، می‌توان GIL را با استفاده از پیکربندی ساخت --disable-gil غیرفعال کرد. پس از ساخت پایتون با این گزینه، کد باید با -X gil=0 یا پس از تنظیم متغیر محیطی PYTHON_GIL=0 اجرا شود. این ویژگی عملکرد بهتر برای برنامه‌های چندنخی را فراهم می‌کند و استفادهٔ مؤثرتر از CPUهای چند‌هسته‌ای را آسان‌تر می‌سازد. برای جزئیات بیشتر، PEP 703 را ببینید.

در نسخه‌های پیشین API زبان C پایتون، یک تابع ممکن بود اعلام کند که برای استفاده از آن، لازم است GIL در اختیار گرفته شده باشد. این موضوع به داشتن یک وضعیت نخٔ متصل اشاره دارد.

وضعیت سراسری

داده‌ای که در سراسر یک برنامه قابل دسترسی است، مانند متغیرهای سطح ماژول، متغیرهای کلاس یا متغیرهای ایستای C در ماژول افزونه. در برنامه‌های چندنخی، وضعیت سراسری اشتراک‌گذاری‌شده بین نخ‌ها معمولاً برای جلوگیری از شرط رقابت و رقابت داده به همگام‌سازی نیاز دارد.

pyc مبتنی بر هش

یک فایل نهانگاه بایت‌کد که به‌جای زمان آخرین تغییر فایل منبع متناظر، از هش آن برای تعیین اعتبار خود استفاده می‌کند. Cached bytecode invalidation را ببینید.

قابل درهم‌سازی

یک شیء قابل درهم‌سازی است اگر دارای یک مقدار هش باشد که در طول عمر آن هرگز تغییر نمی‌کند (به یک متد __hash__() نیاز دارد) و بتوان آن را با اشیای دیگر مقایسه کرد (به یک متد __eq__() نیاز دارد). اشیای قابل درهم‌سازی که برابر مقایسه می‌شوند باید مقدار هش یکسانی داشته باشند.

قابل درهم‌سازی بودن باعث می‌شود یک شیء به‌عنوان کلید دیکشنری و عضو مجموعه قابل استفاده باشد، زیرا این ساختارهای داده مقدار هش را به‌صورت داخلی استفاده می‌کنند.

بیشتر اشیای توکار تغییرناپذیر پایتون قابل درهم‌سازی هستند؛ محفظه‌های تغییرپذیر (مانند فهرست‌ها یا دیکشنری‌ها) قابل درهم‌سازی نیستند؛ محفظه‌های تغییرناپذیر (مانند تاپل‌ها یا frozensetها) فقط در صورتی قابل درهم‌سازی هستند که عناصرشان قابل درهم‌سازی باشند. اشیایی که نمونه‌هایی از کلاس‌های تعریف‌شده توسط کاربر هستند، به‌طور پیش‌فرض قابل درهم‌سازی هستند. همهٔ آن‌ها نابرابر مقایسه می‌شوند (به‌جز با خودشان) و مقدار هش آن‌ها از id() آن‌ها مشتق می‌شود.

IDLE

یک محیط توسعه و یادگیری یکپارچه برای پایتون. IDLE --- Python editor and shell یک محیط ویرایشگر و مفسر پایه است که همراه با توزیع استاندارد پایتون ارائه می‌شود.

نامیرا

اشیای نامیرا یک جزئیات پیاده‌سازی CPython هستند که در PEP 683 معرفی شده‌اند.

اگر یک شیء نامیرا باشد، شمارندهٔ ارجاع آن هرگز تغییر نمی‌کند و بنابراین تا زمانی که مفسر در حال اجرا است، هرگز آزاد نمی‌شود. برای مثال، True و None در CPython نامیرا هستند.

اشیای نامیرا را می‌توان از طریق sys._is_immortal() یا از طریق PyUnstable_IsImmortal() در API زبان C شناسایی کرد.

تغییرناپذیر

شیءای با مقدار ثابت. اشیای تغییرناپذیر شامل اعداد، نخ‌ها و تاپل‌ها هستند. چنین شی‌ءای نمی‌تواند تغییر داده شود. اگر لازم باشد مقدار متفاوتی ذخیره شود، باید شیء جدیدی ایجاد شود. آن‌ها در جاهایی که مقدار هش ثابت لازم است، برای مثال به‌عنوان یک کلید در یک دیکشنری، نقش مهمی دارند. اشیای تغییرناپذیر ذاتاً ایمن برای نخ‌های اجرایی هستند، زیرا وضعیت آن‌ها پس از ایجاد قابل تغییر نیست و نگرانی‌ها دربارهٔ تغییر هم‌زمان که به‌درستی همگام‌سازی نشده است، از بین می‌رود.

ایمپورت مسیر

فهرستی از مکان‌ها (یا ورودی مسیر) که توسط یابندهٔ مبتنی بر مسیر برای ماژول‌های قابل ایمپورت جست‌وجو می‌شود. هنگام ایمپورت، این فهرست از مکان‌ها معمولاً از sys.path می‌آید، اما برای زیر‌بسته‌ها ممکن است از ویژگی __path__ بستهٔ والد نیز به‌دست آید.

ایمپورت کردن

فرایندی که طی آن کد پایتون در یک ماژول برای کد پایتون در ماژولی دیگر در دسترس قرار می‌گیرد.

ایمپورت‌کننده

شی‌ءای که هم یک ماژول را پیدا می‌کند و هم آن را بارگذاری می‌کند؛ هم یک شیء یابنده و هم یک شیء بارگذار.

اندیس

مقداری عددی که موقعیت یک المان را در یک دنباله نشان می‌دهد.

در پایتون، اندیس‌گذاری از صفر شروع می‌شود. برای مثال، things[0] نخستین المان things را نام‌گذاری می‌کند؛ things[1] دومین مورد را نام‌گذاری می‌کند.

در برخی زمینه‌ها، پایتون اجازه می‌دهد از اندیس‌های منفی برای شمارش از انتهای یک دنباله و از اندیس‌گذاری با استفاده از برش استفاده شود.

همچنین زیرنویس را ببینید.

تعاملی

پایتون یک مفسر تعاملی دارد، یعنی می‌توانید دستورها و عبارت‌ها را در اعلان مفسر وارد کنید، آن‌ها را بلافاصله اجرا کنید و نتایجشان را ببینید. فقط python را بدون آرگومان اجرا کنید (احتمالاً با انتخاب آن از منوی اصلی رایانهٔ خود). این روش بسیار قدرتمندی برای آزمایش ایده‌های جدید یا بررسی ماژول‌ها و بسته‌ها است (help(x) را به خاطر داشته باشید). برای اطلاعات بیشتر دربارهٔ حالت تعاملی، حالت تعاملی را ببینید.

تفسیری

پایتون زبانی تفسیری است، در مقابل زبان‌های کامپایل‌شده، هرچند به‌دلیل وجود کامپایلر بایت‌کد، این تمایز می‌تواند مبهم باشد. این یعنی فایل‌های منبع را می‌توان بدون ایجاد صریح یک فایل اجرایی که سپس اجرا شود، مستقیماً اجرا کرد. زبان‌های تفسیری معمولاً چرخهٔ توسعه/اشکال‌زدایی کوتاه‌تری نسبت به زبان‌های کامپایل‌شده دارند، هرچند برنامه‌های آن‌ها معمولاً کندتر اجرا می‌شوند. همچنین تعاملی را ببینید.

خاموشی مفسر

هنگامی که از مفسر پایتون خواسته می‌شود خاموش شود، وارد مرحلهٔ ویژه‌ای می‌شود که در آن به‌تدریج همهٔ منابع تخصیص‌یافته، مانند ماژول‌ها و ساختارهای داخلی مهم مختلف، آزاد می‌شوند. همچنین چندین فراخوانی به زباله‌روبی انجام می‌دهد. این کار می‌تواند اجرای کد در نابودگرهای تعریف‌شده توسط کاربر یا کال‌بک‌های weakref را فعال کند. کدی که در مرحلهٔ خاموشی اجرا می‌شود ممکن است با استثناهای مختلفی روبه‌رو شود، زیرا منابعی که به آن‌ها وابسته است ممکن است دیگر کار نکنند (نمونه‌های رایج شامل ماژول‌های کتابخانه یا سازوکار هشدارها هستند).

دلیل اصلی خاموشی مفسر این است که ماژول __main__ یا اسکریپتی که در حال اجرا است، اجرای خود را به پایان رسانده است.

تکرارپذیر

شیءای که قادر است اعضای خود را یکی‌یکی بازگرداند. نمونه‌هایی از تکرارپذیرها شامل همهٔ نوع‌های دنباله‌ای (مانند list، str و tuple) و برخی نوع‌های غیرتوالی مانند dict، شیء فایل و اشیای هر کلاسی که شما با متد __iter__() یا با متد __getitem__() که معناشناسی دنباله را پیاده‌سازی می‌کند تعریف می‌کنید، هستند.

تکرارپذیرها را می‌توان در یک حلقهٔ for و در بسیاری از مکان‌های دیگری که یک دنباله لازم است (zip()، map() و ...) استفاده کرد. هنگامی که یک شیء تکرارپذیر به‌عنوان آرگومان به تابع توکار iter() داده می‌شود، یک تکرارگر برای آن شیء بازمی‌گرداند. این تکرارگر برای یک بار پیمایش مجموعهٔ مقادیر مناسب است. هنگام استفاده از تکرارپذیرها، معمولاً لازم نیست خودتان iter() را فراخوانی کنید یا با اشیای تکرارگر سروکار داشته باشید. دستور for این کار را به‌طور خودکار برای شما انجام می‌دهد و یک متغیر موقتِ بدون نام ایجاد می‌کند تا در طول حلقه تکرارگر را نگه دارد. همچنین تکرارگر، دنباله و تولیدگر را ببینید.

تکرارگر

شیءای که جریانی از داده‌ها را نمایش می‌دهد. فراخوانی‌های تکراری متد __next__() تکرارگر (یا ارسال آن به تابع توکار next()) آیتم‌های پیاپی در جریان را بازمی‌گرداند. هنگامی که دادهٔ بیشتری در دسترس نباشد، به‌جای آن استثنای StopIteration پرتاب می‌شود. در این نقطه، شیء تکرارگر تمام شده است و هر فراخوانی بعدی متد __next__() آن، دوباره فقط استثنای StopIteration ایجاد می‌کند. تکرارگرها باید متد __iter__() داشته باشند که خود شیء تکرارگر را بازمی‌گرداند، بنابراین هر تکرارگر تکرارپذیر نیز هست و می‌تواند در بیشتر جاهایی که تکرارپذیرهای دیگر پذیرفته می‌شوند استفاده شود. یک استثنای قابل توجه، کدی است که تلاش می‌کند چندین بار پیمایش انجام دهد. یک شیء محفظه‌ای (مانند list) هر بار که به تابع iter() داده شود یا در یک حلقهٔ for استفاده شود، یک تکرارگر جدید تولید می‌کند. تلاش برای انجام این کار با یک تکرارگر، فقط همان شیء تکرارگر تمام‌شده‌ای را بازمی‌گرداند که در پیمایش قبلی استفاده شده بود و باعث می‌شود مانند یک محفظهٔ خالی به نظر برسد.

اطلاعات بیشتر را می‌توان در Iterator Types یافت.

CPython به‌طور سازگار الزام تعریف متد __iter__() برای یک تکرارگر را اعمال نمی‌کند. همچنین توجه داشته باشید که CPython نخ‌گذاری آزاد رفتار ایمن برای نخ‌های اجرایی را برای عملیات تکرارگرها تضمین نمی‌کند.

کلید

مقداری که یک ورودی را در یک نگاشت شناسایی می‌کند. همچنین زیرنویس را ببینید.

تابع کلید

یک تابع کلید یا تابع هم‌ترازی، یک شیء قابل فراخوانی است که مقداری را بازمی‌گرداند که برای مرتب‌سازی یا ترتیب‌دهی استفاده می‌شود. برای مثال، locale.strxfrm() برای تولید یک کلید مرتب‌سازی که از قراردادهای مرتب‌سازی خاص یک محلی آگاه است استفاده می‌شود.

تعدادی از ابزارهای پایتون، توابع کلید را برای کنترل نحوهٔ ترتیب‌دهی یا گروه‌بندی المان‌ها می‌پذیرند. این ابزارها شامل min()، max()، sorted()، list.sort()، heapq.merge()، heapq.nsmallest()، heapq.nlargest() و itertools.groupby() هستند.

چندین روش برای ایجاد یک تابع کلید وجود دارد. برای مثال، متد str.casefold() می‌تواند به‌عنوان یک تابع کلید برای مرتب‌سازی‌های بدون حساسیت به بزرگی و کوچکی حروف استفاده شود. همچنین، یک تابع کلید می‌تواند از یک عبارت lambda مانند lambda r: (r[0], r[2]) ساخته شود. علاوه بر این، operator.attrgetter()، operator.itemgetter() و operator.methodcaller() سه سازندهٔ تابع کلید هستند. برای نمونه‌هایی از نحوهٔ ایجاد و استفاده از توابع کلید، Sorting HOW TO را ببینید.

آرگومان کلیدواژه‌ای

آرگومان را ببینید.

lambda

یک تابع درون‌خطی بی‌نام که از یک عبارت واحد تشکیل شده است و هنگام فراخوانی تابع ارزیابی می‌شود. سینتکس ایجاد یک تابع lambda به‌صورت lambda [parameters]: expression است

LBYL

پیش از جهش نگاه کنید. این سبک کدنویسی پیش‌شرط‌ها را پیش از انجام فراخوانی‌ها یا جست‌وجوها به‌طور صریح آزمایش می‌کند. این سبک در تضاد با رویکرد EAFP است و با وجود تعداد زیادی دستور if شناخته می‌شود.

در یک محیط چندنخی، رویکرد LBYL می‌تواند خطر ایجاد یک شرط رقابت بین «نگاه کردن» و «جهش کردن» را به همراه داشته باشد. برای مثال، کد if key in mapping: return mapping[key] ممکن است شکست بخورد اگر نخ‌ای دیگر پس از آزمون، اما پیش از جست‌وجو، key را از mapping حذف کند. این مشکل را می‌توان با قفل یا با استفاده از رویکرد EAFP حل کرد. همچنین ایمن برای نخ‌های اجرایی را ببینید.

تحلیلگر واژگانی

نام رسمی برای tokenizer؛ توکن را ببینید.

فهرست

یک دنباله توکار پایتون. با وجود نام آن، این نوع بیشتر شبیه یک آرایه در زبان‌های دیگر است تا یک فهرست پیوندی، زیرا دسترسی به المان‌ها O(1) است.

درک فهرستی

روشی فشرده برای پردازش همه یا بخشی از المان‌های یک دنباله و بازگرداندن یک فهرست با نتایج. result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] فهرستی از نخ‌ها شامل اعداد مبنای شانزده زوج (0x..) در محدودهٔ ۰ تا ۲۵۵ تولید می‌کند. بند if اختیاری است. اگر حذف شود، همهٔ المان‌های range(256) پردازش می‌شوند.

قفل

یک اولیه که در هر زمان فقط به یک نخ اجازهٔ دسترسی به یک منبع اشتراکی را می‌دهد. یک نخ باید پیش از دسترسی به منبع محافظت‌شده، یک قفل را به‌دست آورد و پس از آن آن را آزاد کند. اگر یک نخ تلاش کند قفلی را به‌دست آورد که پیش‌تر توسط نخ‌ای دیگر در اختیار گرفته شده است، تا زمانی که قفل در دسترس قرار گیرد مسدود می‌شود. ماژول threading پایتون، Lock (یک قفل پایه) و RLock (یک قفل بازورودپذیر) را فراهم می‌کند. قفل‌ها برای جلوگیری از شرط رقابت و تضمین دسترسی ایمن برای نخ‌های اجرایی به داده‌های اشتراکی استفاده می‌شوند. الگوهای طراحی جایگزین برای قفل‌ها وجود دارند، مانند صف‌ها، الگوهای تولیدکننده/مصرف‌کننده و وضعیت محلی نخ. همچنین بن‌بست و بازورودپذیر را ببینید.

بدون قفل

عملیاتی که هیچ قفلای به‌دست نمی‌آورد و برای تضمین درستی از دستورهای اتمی CPU استفاده می‌کند. عملیات‌های بدون قفل می‌توانند به‌طور هم‌زمان و بدون مسدود کردن یکدیگر اجرا شوند و نمی‌توانند توسط عملیات‌هایی که قفل‌ها را در اختیار دارند مسدود شوند. در پایتون نخ‌گذاری آزاد، نوع‌های توکار مانند dict و list عملیات‌های خواندن بدون قفل ارائه می‌کنند، یعنی نخ‌های دیگر ممکن است در طول تغییرات چندمرحله‌ای، حتی زمانی که آن تغییرات قفلِ هر شیء را نگه داشته‌اند، وضعیت‌های میانی را مشاهده کنند.

بارگذار

شیءای که یک ماژول را بارگذاری می‌کند. برای پیاده‌سازی رابط Loader باید متدهای exec_module() و create_module() را تعریف کند. یک بارگذار معمولاً توسط یک یابنده بازگردانده می‌شود. همچنین ببینید:

کدگذاری محلی

در یونیکس، این همان کدگذاری محلی LC_CTYPE است. می‌توان آن را با locale.setlocale(locale.LC_CTYPE, new_locale) تنظیم کرد.

در ویندوز، این همان صفحهٔ کد ANSI است (برای مثال "cp1252").

در Android و VxWorks، پایتون از "utf-8" به‌عنوان کدگذاری محلی استفاده می‌کند.

از locale.getencoding() می‌توان برای دریافت کدگذاری محلی استفاده کرد.

همچنین کدگذاری سیستم فایل و مدیریت‌کنندهٔ خطا را ببینید.

متد جادویی

یک مترادف غیررسمی برای متد ویژه.

نگاشت

یک شیء محفظه‌ای که از جست‌وجوی کلیدهای دلخواه پشتیبانی می‌کند و متدهای مشخص‌شده در collections.abc.Mapping یا collections.abc.MutableMapping abstract base classes را پیاده‌سازی می‌کند. نمونه‌ها شامل dict، collections.defaultdict، collections.OrderedDict و collections.Counter هستند.

یابندهٔ مسیر فراداده

یک یابنده که از جست‌وجوی sys.meta_path بازگردانده می‌شود. یابنده‌های مسیر فراداده با یابندهٔ ورودی مسیر مرتبط هستند، اما با آن‌ها تفاوت دارند.

برای متدهایی که یابنده‌های مسیر فراداده پیاده‌سازی می‌کنند، importlib.abc.MetaPathFinder را ببینید.

فراکلاس

کلاس یک کلاس. تعریف‌های کلاس یک نام کلاس، یک دیکشنری کلاس و یک فهرست از کلاس‌های پایه ایجاد می‌کنند. فراکلاس مسئول دریافت این سه آرگومان و ایجاد کلاس است. بیشتر زبان‌های برنامه‌نویسی شیءگرا یک پیاده‌سازی پیش‌فرض ارائه می‌کنند. چیزی که پایتون را ویژه می‌کند این است که امکان ایجاد فراکلاس‌های سفارشی وجود دارد. بیشتر کاربران هرگز به این ابزار نیاز پیدا نمی‌کنند، اما هنگامی که نیاز به آن پیش بیاید، فراکلاس‌ها می‌توانند راه‌حل‌های قدرتمند و ظریفی ارائه دهند. از آن‌ها برای ثبت دسترسی به ویژگی‌ها، افزودن ایمنی نخ‌ای، پیگیری ایجاد شیء، پیاده‌سازی تک‌نمونه‌ها و بسیاری کارهای دیگر استفاده شده است.

اطلاعات بیشتر را می‌توان در Metaclasses یافت.

متد

تابعی که درون بدنهٔ یک کلاس تعریف شده است. اگر به‌عنوان یک ویژگی از یک نمونهٔ آن کلاس فراخوانی شود، متد شیء نمونه را به‌عنوان نخستین آرگومان خود دریافت می‌کند (که معمولاً self نامیده می‌شود). تابع و محدودهٔ تو‌در‌تو را ببینید.

ترتیب حل متد

ترتیب حل متد، ترتیبی است که در آن کلاس‌های پایه هنگام جست‌وجوی یک عضو بررسی می‌شوند. برای جزئیات الگوریتمی که مفسر پایتون از انتشار ۲.۳ به بعد استفاده می‌کند، The Python 2.3 Method Resolution Order را ببینید.

ماژول

شیءای که به‌عنوان واحد سازمان‌دهی کد پایتون عمل می‌کند. ماژول‌ها یک نام‌فضا دارند که شامل اشیای دلخواه پایتون است. ماژول‌ها از طریق فرایند ایمپورت کردن در پایتون بارگذاری می‌شوند.

همچنین بسته را ببینید.

مشخصات ماژول

نام‌فضایی که شامل اطلاعات مرتبط با ایمپورت است و برای بارگذاری یک ماژول استفاده می‌شود. یک نمونه از importlib.machinery.ModuleSpec.

همچنین Module specs را ببینید.

MRO

ترتیب حل متد را ببینید.

تغییرپذیر

یک شیء که وضعیت آن در طول اجرای برنامه اجازهٔ تغییر دارد. در برنامه‌های چندنخی، اشیای تغییرپذیری که بین نخ‌ها اشتراک‌گذاری می‌شوند، برای جلوگیری از شرط رقابت به همگام‌سازی دقیق نیاز دارند. همچنین تغییرناپذیر، ایمن برای نخ‌های اجرایی و تغییر هم‌زمان را ببینید.

تاپل نام‌دار

اصطلاح «تاپل نام‌دار» برای هر نوع یا کلاسی به‌کار می‌رود که از tuple ارث‌بری می‌کند و المان‌های قابل دسترسی با اندیس آن، با استفاده از ویژگی‌های نام‌دار نیز قابل دسترسی هستند. این نوع یا کلاس ممکن است ویژگی‌های دیگری نیز داشته باشد.

چندین نوع توکار، تاپل نام‌دار هستند، از جمله مقادیری که توسط time.localtime() و os.stat() بازگردانده می‌شوند. نمونهٔ دیگر sys.float_info است:

>>> sys.float_info[1]                   # دسترسی با اندیس
1024
>>> sys.float_info.max_exp              # دسترسی به فیلد نام‌گذاری‌شده
1024
>>> isinstance(sys.float_info, tuple)   # نوعی تاپل
True

برخی تاپل‌های نام‌دار، نوع‌های توکار هستند (مانند نمونه‌های بالا). روش دیگر، ایجاد یک تاپل نام‌دار از طریق یک تعریف کلاس معمولی است که از tuple ارث‌بری می‌کند و فیلدهای نام‌دار را تعریف می‌کند. چنین کلاسی را می‌توان به‌صورت دستی نوشت، یا با ارث‌بری از typing.NamedTuple، یا با تابع کارخانهٔ collections.namedtuple() ایجاد کرد. دو روش اخیر همچنین چند متد اضافی اضافه می‌کنند که ممکن است در تاپل‌های نام‌دار دست‌نویس یا توکار وجود نداشته باشند.

نام‌فضا

محلی که یک متغیر در آن ذخیره می‌شود. نام‌فضاها به‌صورت دیکشنری پیاده‌سازی می‌شوند. نام‌فضاهای محلی، سراسری و توکار، همچنین نام‌فضاهای تو‌در‌تو در اشیا (در متدها) وجود دارند. نام‌فضاها با جلوگیری از تداخل نام‌ها، پیمانه‌ای بودن را پشتیبانی می‌کنند. برای نمونه، تابع‌های builtins.open و os.open() با استفاده از نام‌فضاهای خود از یکدیگر متمایز می‌شوند. نام‌فضاها همچنین با مشخص کردن اینکه کدام ماژول یک تابع را پیاده‌سازی می‌کند، به خوانایی و نگه‌داری‌پذیری کمک می‌کنند. برای نمونه، نوشتن random.seed() یا itertools.islice() مشخص می‌کند که این تابع‌ها به‌ترتیب توسط ماژول‌های random و itertools پیاده‌سازی شده‌اند.

بستهٔ نام‌فضا

یک بسته که فقط به‌عنوان محفظه‌ای برای زیربسته‌ها عمل می‌کند. بسته‌های نام‌فضا ممکن است نمایش فیزیکی نداشته باشند و به‌طور مشخص مانند یک بستهٔ معمولی نیستند، زیرا فایل __init__.py ندارند.

بسته‌های نام‌فضا به چندین بستهٔ قابل نصب مستقل اجازه می‌دهند که یک بستهٔ والد مشترک داشته باشند. در غیر این صورت، توصیه می‌شود از یک بستهٔ معمولی استفاده کنید.

برای اطلاعات بیشتر، PEP 420 و Namespace packages را ببینید.

همچنین ماژول را ببینید.

کد بومی

کدی که به دستورهای ماشین کامپایل شده و مستقیماً روی پردازنده اجرا می‌شود، برخلاف کدی که تفسیر می‌شود یا در یک ماشین مجازی اجرا می‌شود. در زمینهٔ پایتون، کد بومی معمولاً به کد C، C++، Rust یا Fortran در ماژول افزونه اشاره دارد که می‌توانند از پایتون فراخوانی شوند. همچنین ماژول افزونه را ببینید.

محدودهٔ تو‌در‌تو

توانایی ارجاع به یک متغیر در یک تعریف دربرگیرنده. برای مثال، تابعی که داخل تابع دیگری تعریف شده است می‌تواند به متغیرهای تابع بیرونی دسترسی داشته باشد. توجه کنید که محدوده‌های تو‌در‌تو به‌صورت پیش‌فرض فقط برای ارجاع دادن و نه برای انتساب کار می‌کنند. متغیرهای محلی هم در نزدیک‌ترین محدوده خوانده و نوشته می‌شوند. به همین ترتیب، متغیرهای سراسری از نام‌فضای سراسری خوانده و در آن نوشته می‌شوند. کلیدواژهٔ nonlocal امکان نوشتن در محدوده‌های بیرونی را فراهم می‌کند.

کلاس سبک جدید

نام قدیمی برای گونه‌ای از کلاس‌ها که اکنون برای همهٔ اشیای کلاس استفاده می‌شود. در نسخه‌های قدیمی‌تر پایتون، فقط کلاس‌های سبک جدید می‌توانستند از قابلیت‌های جدیدتر و انعطاف‌پذیر پایتون مانند __slots__، توصیف‌گرها، ویژگی‌ها، __getattribute__()، متدهای کلاس و متدهای ایستا استفاده کنند.

غیرقطعی

رفتاری که در آن نتیجهٔ یک برنامه می‌تواند بین اجراهای مختلف با ورودی‌های یکسان متفاوت باشد. در برنامه‌های چندنخی، رفتار غیرقطعی اغلب از شرط رقابت ناشی می‌شود که در آن زمان‌بندی نسبی یا درهم‌تنیدگی نخ‌ها بر نتیجه تأثیر می‌گذارد. همگام‌سازی مناسب با استفاده از قفل و دیگر اولیه به تضمین رفتار قطعی کمک می‌کند.

شیء

هر داده‌ای با وضعیت (ویژگی‌ها یا مقدار) و رفتار تعریف‌شده (متدها). همچنین کلاس پایهٔ نهایی هر کلاس سبک جدید.

محدودهٔ بهینه‌شده

محدوده‌ای که در آن نام‌های متغیرهای محلی هدف هنگام کامپایل کد به‌طور قابل اطمینانی برای کامپایلر شناخته شده‌اند و امکان بهینه‌سازی دسترسی خواندن و نوشتن به این نام‌ها فراهم می‌شود. نام‌فضاهای محلی برای تابع‌ها، تولیدگرها، هم‌روال‌ها، درک‌ها و عبارت‌های تولیدگر به این روش بهینه می‌شوند. توجه کنید: بیشتر بهینه‌سازی‌های مفسر روی همهٔ محدوده‌ها اعمال می‌شوند؛ تنها بهینه‌سازی‌هایی که به مجموعهٔ شناخته‌شده‌ای از نام‌های متغیرهای محلی و غیرمحلی وابسته هستند، به محدوده‌های بهینه‌شده محدود می‌شوند.

ماژول اختیاری

یک ماژول افزونه که بخشی از کتابخانهٔ استاندارد است، اما ممکن است در برخی ساخت‌های CPython وجود نداشته باشد؛ معمولاً به دلیل نبود کتابخانه‌های شخص ثالث یا در دسترس نبودن ماژول برای یک سکوی مشخص.

برای فهرستی از ماژول‌های اختیاری که به کتابخانه‌های شخص ثالث نیاز دارند، Requirements for optional modules را ببینید.

بسته

یک ماژول پایتون که می‌تواند شامل زیرماژول‌ها یا به‌صورت بازگشتی، زیربسته‌ها باشد. از نظر فنی، یک بسته یک ماژول پایتون با ویژگی __path__ است.

همچنین بستهٔ معمولی و بستهٔ نام‌فضا را ببینید.

موازی‌سازی

اجرای چندین عملیات در یک زمان (برای مثال روی چند هستهٔ CPU). در ساخت‌های پایتون با قفل مفسر سراسری، تنها یک نخ در هر لحظه بایت‌کد پایتون را اجرا می‌کند، بنابراین بهره‌گیری از چند هستهٔ CPU معمولاً شامل چند فرایند (برای مثال multiprocessing) یا افزونه‌های بومی است که GIL را آزاد می‌کنند. در پایتون نخ‌گذاری آزاد، چندین نخٔ پایتون می‌توانند به‌طور هم‌زمان کد پایتون را روی هسته‌های مختلف اجرا کنند.

پارامتر

یک موجودیت نام‌گذاری‌شده در تعریف یک تابع (یا متد) که یک آرگومان (یا در برخی موارد، آرگومان‌ها) را مشخص می‌کند که تابع می‌تواند بپذیرد. پنج نوع پارامتر وجود دارد:

  • positional-or-keyword: آرگومانی را مشخص می‌کند که می‌تواند به‌صورت آرگومان یا به‌عنوان یک آرگومان ارسال شود. این نوع پیش‌فرض پارامتر است، برای مثال foo و bar در موارد زیر:

    def func(foo, bar=None): ...
    
  • positional-only: آرگومانی را مشخص می‌کند که فقط می‌تواند بر اساس جایگاه ارائه شود. پارامترهای فقط-جایگاهی را می‌توان با قرار دادن یک نویسهٔ / در فهرست پارامترهای تعریف تابع پس از آن‌ها تعریف کرد، برای مثال posonly1 و posonly2 در موارد زیر:

    def func(posonly1, posonly2, /, positional_or_keyword): ...
    
  • keyword-only: آرگومانی را مشخص می‌کند که فقط می‌تواند با کلیدواژه ارسال شود. پارامترهای فقط کلیدواژه‌ای را می‌توان با قرار دادن یک پارامتر var-positional یا * بدون نام در فهرست پارامترهای تعریف تابع پیش از آن‌ها تعریف کرد، برای مثال kw_only1 و kw_only2 در موارد زیر:

    def func(arg, *, kw_only1, kw_only2): ...
    
  • var-positional: مشخص می‌کند که یک دنبالهٔ دلخواه از آرگومان‌های جایگاهی می‌تواند ارائه شود (علاوه بر هر آرگومان جایگاهی که پیش‌تر توسط پارامترهای دیگر پذیرفته شده است). چنین پارامتری را می‌توان با افزودن * به ابتدای نام پارامتر تعریف کرد، برای مثال args در موارد زیر:

    def func(*args, **kwargs): ...
    
  • var-keyword: مشخص می‌کند که تعداد دلخواهی از آرگومان‌های کلیدواژه‌ای می‌تواند ارائه شود (علاوه بر هر آرگومان کلیدواژه‌ای که پیش‌تر توسط پارامترهای دیگر پذیرفته شده است). چنین پارامتری را می‌توان با افزودن ** به ابتدای نام پارامتر تعریف کرد، برای مثال kwargs در مثال بالا.

پارامترها می‌توانند هم آرگومان‌های اختیاری و ضروری، و هم مقدارهای پیش‌فرض برای برخی آرگومان‌های اختیاری را مشخص کنند.

همچنین مدخل واژه‌نامهٔ آرگومان، پرسش متداول دربارهٔ تفاوت بین آرگومان‌ها و پارامترها، کلاس inspect.Parameter، بخش Function definitions و PEP 362 را ببینید.

قفلِ هر شیء

یک قفل مرتبط با یک نمونهٔ شیء منفرد، به‌جای یک قفل سراسری که بین همهٔ اشیا اشتراک‌گذاری شده باشد. در پایتون نخ‌گذاری آزاد، نوع‌های توکار مانند dict و list از قفل‌های هر شیء استفاده می‌کنند تا امکان عملیات هم‌زمان روی اشیای مختلف را فراهم کنند، در حالی که عملیات روی همان شیء را به‌صورت ترتیبی اجرا می‌کنند. عملیات‌هایی که قفل هر شیء را نگه می‌دارند، از ادامهٔ دیگر عملیات‌های قفل‌کننده روی همان شیء جلوگیری می‌کنند، اما عملیات‌های بدون قفل را مسدود نمی‌کنند.

ورودی مسیر

یک مکان منفرد در ایمپورت مسیر که یابندهٔ مبتنی بر مسیر برای یافتن ماژول‌ها جهت ایمپورت بررسی می‌کند.

یابندهٔ ورودی مسیر

یک یابنده که توسط یک فراخوانی‌پذیر در sys.path_hooks (یعنی یک قلاب ورودی مسیر) بازگردانده می‌شود و می‌داند چگونه با داشتن یک ورودی مسیر، ماژول‌ها را پیدا کند.

برای متدهایی که یابنده‌های ورودی مسیر پیاده‌سازی می‌کنند، importlib.abc.PathEntryFinder را ببینید.

قلاب ورودی مسیر

یک فراخوانی‌پذیر در فهرست sys.path_hooks که اگر بداند چگونه ماژول‌ها را در یک ورودی مسیر مشخص پیدا کند، یک یابندهٔ ورودی مسیر بازمی‌گرداند.

یابندهٔ مبتنی بر مسیر

یکی از یابندهٔ مسیر فراداده پیش‌فرض که یک ایمپورت مسیر را برای یافتن ماژول‌ها جست‌وجو می‌کند.

شیء شبه‌مسیر

شی‌ءای که یک مسیر سامانهٔ فایل را نمایش می‌دهد. یک شیء شبه‌مسیر یا یک شیء str یا bytes است که یک مسیر را نمایش می‌دهد، یا شی‌ءای است که پروتکل os.PathLike را پیاده‌سازی می‌کند. شی‌ءای که از پروتکل os.PathLike پشتیبانی می‌کند، می‌تواند با فراخوانی تابع os.fspath() به یک مسیر سامانهٔ فایل str یا bytes تبدیل شود؛ os.fsdecode() و os.fsencode() می‌توانند به‌ترتیب برای تضمین نتیجهٔ str یا bytes استفاده شوند. معرفی‌شده در PEP 519.

PEP

پیشنهاد بهبود پایتون. یک PEP یک سند طراحی است که اطلاعاتی را برای کامیونیتی پایتون ارائه می‌کند، یا یک ویژگی جدید برای پایتون، فرایندهای آن یا محیط آن را توصیف می‌کند. PEPها باید یک مشخصات فنی مختصر و یک منطق برای ویژگی‌های پیشنهادی ارائه کنند.

PEP ها برای این طراحی شده‌اند که سازوکارهای اصلی پیشنهاد ویژگی‌های بزرگ جدید، جمع‌آوری نظرهای کامیونیتی دربارهٔ یک موضوع و مستندسازی تصمیم‌های طراحی گرفته‌شده برای پایتون باشند. نویسندهٔ PEP مسئول ایجاد توافق در کامیونیتی و مستندسازی دیدگاه‌های مخالف است.

PEP 1 را ببینید.

بخش

مجموعه‌ای از فایل‌ها در یک پوشهٔ واحد (که ممکن است در یک فایل zip ذخیره شده باشند) که در یک بستهٔ نام‌فضا، همان‌طور که در PEP 420 تعریف شده است، مشارکت می‌کنند.

آرگومان جایگاهی

آرگومان را ببینید.

API موقت

یک API موقت، رابطی است که به‌طور عمدی از تضمین‌های سازگاری رو‌به‌عقب کتابخانهٔ استاندارد خارج شده است. با اینکه تغییرات بزرگ در چنین رابط‌هایی انتظار نمی‌رود، تا زمانی که موقت علامت‌گذاری شده باشند، اگر توسعه‌دهندگان اصلی آن را ضروری بدانند، تغییرات ناسازگار با نسخه‌های پیشین (تا حذف کامل رابط نیز) ممکن است رخ دهد. چنین تغییراتی بدون دلیل انجام نخواهند شد؛ آن‌ها تنها در صورتی رخ می‌دهند که نقص‌های بنیادی و جدی‌ای کشف شوند که پیش از اضافه شدن API از آن‌ها چشم‌پوشی شده بود.

حتی برای APIهای موقت، تغییرات ناسازگار با نسخه‌های پیشین به‌عنوان «راه‌حل آخر» در نظر گرفته می‌شوند؛ همچنان هر تلاشی برای یافتن راه‌حلی سازگار با نسخه‌های پیشین برای مشکلات شناسایی‌شده انجام خواهد شد.

این فرایند به کتابخانهٔ استاندارد اجازه می‌دهد در طول زمان به تکامل خود ادامه دهد، بدون اینکه خطاهای طراحی مشکل‌ساز را برای دوره‌های طولانی تثبیت کند. برای جزئیات بیشتر، PEP 411 را ببینید.

بستهٔ موقت

API موقت را ببینید.

پایتون ۳۰۰۰

نام مستعار برای خط انتشار Python ۳.x (که مدت‌ها پیش، زمانی که انتشار نسخهٔ ۳ چیزی در آیندهٔ دور بود، ساخته شد.) این عبارت همچنین به‌صورت «Py3k» کوتاه می‌شود.

پایتونی

ایده یا بخشی از کد که به‌جای پیاده‌سازی با مفاهیم رایج در زبان‌های دیگر، به‌طور نزدیک از شیوه‌های رایج زبان پایتون پیروی می‌کند. برای مثال، یک شیوهٔ رایج در پایتون این است که با استفاده از دستور for روی همهٔ المان‌های یک تکرارپذیر حلقه زده شود. بسیاری از زبان‌های دیگر چنین ساختاری ندارند، بنابراین افرادی که با پایتون آشنا نیستند گاهی به‌جای آن از یک شمارندهٔ عددی استفاده می‌کنند:

for i in range(len(food)):
    print(food[i])

در مقابل، روش تمیزتر و پایتونی:

for piece in food:
    print(piece)
نام واجد شرایط

نامی نقطه‌گذاری‌شده که «مسیر» از محدودهٔ سراسری یک ماژول تا یک کلاس، تابع یا متد تعریف‌شده در آن ماژول را نشان می‌دهد، همان‌طور که در PEP 3155 تعریف شده است. برای تابع‌ها و کلاس‌های سطح بالا، نام واجد شرایط همان نام شیء است:

>>> class C:
...     class D:
...         def meth(self):
...             pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> C.D.meth.__qualname__
'C.D.meth'

هنگامی که برای اشاره به ماژول‌ها استفاده می‌شود، نام کاملاً واجد شرایط به معنای کل مسیر نقطه‌گذاری‌شده به ماژول است که شامل هر بستهٔ والد نیز می‌شود، برای مثال email.mime.text:

>>> import email.mime.text
>>> email.mime.text.__name__
'email.mime.text'
شرط رقابت

شرایطی در یک برنامه که در آن رفتار به زمان‌بندی نسبی یا ترتیب رویدادها وابسته است، به‌ویژه در برنامه‌های چندنخی. شرایط رقابت می‌توانند به رفتار غیرقطعی و خطاهایی منجر شوند که بازتولید آن‌ها دشوار است. یک رقابت داده نوع خاصی از شرط رقابت است که شامل دسترسی بدون همگام‌سازی به حافظهٔ اشتراکی می‌شود. سبک کدنویسی LBYL در کد چندنخی به‌طور ویژه در برابر شرایط رقابت آسیب‌پذیر است. استفاده از قفل و دیگر اولیه به جلوگیری از شرایط رقابت کمک می‌کند.

شمارندهٔ ارجاع

تعداد ارجاع‌ها به یک شیء. هنگامی که تعداد ارجاع‌های یک شیء به صفر کاهش یابد، آن شیء از حافظه آزاد می‌شود. برخی اشیاء نامیرا هستند و تعداد ارجاع‌های آن‌ها هرگز تغییر نمی‌کند و بنابراین این اشیاء هرگز از حافظه آزاد نمی‌شوند. شمارش ارجاع‌ها عموماً برای کد پایتون قابل مشاهده نیست، اما یکی از عناصر کلیدی پیاده‌سازی CPython است. برنامه‌نویسان می‌توانند تابع sys.getrefcount() را فراخوانی کنند تا تعداد ارجاع‌های یک شیء خاص را برگرداند.

در CPython، تعداد ارجاع‌ها مقادیر پایدار یا به‌خوبی تعریف‌شده‌ای در نظر گرفته نمی‌شوند؛ تعداد ارجاع‌ها به یک شیء و نحوه تأثیرپذیری این تعداد از کد پایتون ممکن است بین نسخه‌ها متفاوت باشد.

بستهٔ معمولی

یک بسته سنتی، مانند پوشه‌ای که شامل یک فایل __init__.py است.

همچنین بستهٔ نام‌فضا را ببینید.

بازورودپذیر

ویژگی یک تابع یا قفل که به آن اجازه می‌دهد بدون ایجاد خطا یا یک بن‌بست، چندین بار توسط یک نخٔ اجرایی یکسان فراخوانی یا دریافت شود.

در مورد توابع، بازورودپذیری به این معناست که می‌توان تابع را پیش از کامل‌شدن یک فراخوانی قبلی، دوباره با ایمنی فراخوانی کرد؛ این موضوع زمانی اهمیت دارد که توابع ممکن است به‌صورت بازگشتی یا از درون دستگردان‌های سیگنال فراخوانی شوند. توابع ناایمن برای نخ‌های اجرایی ممکن است در صورتی که در یک برنامهٔ چندنخی به‌صورت بازورودپذیر فراخوانی شوند، غیرقطعی باشند.

در مورد قفل‌ها، threading.RLock پایتون (قفل بازورودپذیر) بازورودپذیر است؛ یعنی نخٔ اجرایی‌ای که از پیش قفل را در اختیار دارد، می‌تواند دوباره آن را دریافت کند، بدون آنکه مسدود شود. در مقابل، threading.Lock بازورودپذیر نیست؛ تلاش برای دریافت آن دو بار از همان نخٔ اجرایی باعث یک بن‌بست می‌شود.

همچنین قفل و بن‌بست را ببینید.

REPL

سرواژهٔ «read–eval–print loop» و نام دیگری برای پوستهٔ مفسر تعاملی است.

__slots__

یک اعلان درون یک کلاس که با پیش‌اعلام فضای موردنیاز برای ویژگی‌های نمونه و حذف دیکشنری‌های نمونه، در حافظه صرفه‌جویی می‌کند. با وجود محبوبیت این روش، پیاده‌سازی درست آن تا حدی دشوار است و بهتر است آن را به موارد نادری محدود کنید که تعداد نمونه‌ها زیاد است و برنامه از نظر حافظه حساس است.

دنباله

یک تکرارپذیر که از دسترسی کارآمد به المان‌ها با استفاده از اندیس‌های عدد صحیح از طریق متد ویژهٔ __getitem__() پشتیبانی می‌کند و متد __len__() را تعریف می‌کند که طول دنباله را برمی‌گرداند. برخی از انواع دنبالهٔ توکار عبارت‌اند از list، str، tuple و bytes. توجه کنید که dict نیز از __getitem__() و __len__() پشتیبانی می‌کند، اما به‌جای دنباله، نگاشت در نظر گرفته می‌شود، زیرا جست‌وجوها از کلیدهای قابل درهم‌سازی دلخواه به‌جای اعداد صحیح استفاده می‌کنند.

کلاس پایهٔ انتزاعی collections.abc.Sequence رابط بسیار غنی‌تری را تعریف می‌کند که فراتر از صرفاً __getitem__() و __len__() است و count()، index()، __contains__() و __reversed__() را نیز اضافه می‌کند. نوع‌هایی که این رابط گسترش‌یافته را پیاده‌سازی می‌کنند، می‌توانند به‌طور صریح با استفاده از register() ثبت شوند. برای مستندات بیشتر دربارهٔ متدهای دنباله به‌طور کلی، Common Sequence Operations را ببینید.

درک مجموعه‌ای

روشی فشرده برای پردازش همه یا بخشی از المان‌های یک تکرارپذیر و بازگرداندن یک مجموعه با نتایج. results = {c for c in 'abracadabra' if c not in 'abc'} مجموعه‌ای از رشته‌ها به‌شکل {'r', 'd'} تولید می‌کند. Displays for lists, sets and dictionaries را ببینید.

توزیع تک‌گانه

نوعی توزیع تابع عمومی که در آن پیاده‌سازی بر اساس نوع یک آرگومان واحد انتخاب می‌شود.

برش

یک شیء از نوع slice که برای توصیف بخشی از یک دنباله استفاده می‌شود. یک شیء برش هنگام استفاده از شکل slicing در subscript notation، با دو نقطه درون کروشه‌ها، مانند variable_name[1:3:5]، ایجاد می‌شود.

منسوخ‌سازی نرم

از یک API که به‌صورت منسوخ‌سازی نرم علامت‌گذاری شده است نباید در کد جدید استفاده شود، اما استفاده از آن در کدهای موجود ایمن است. این API همچنان مستندسازی و آزمایش می‌شود، اما دیگر بهبود داده نخواهد شد.

منسوخ‌سازی نرم، برخلاف منسوخ‌سازی معمولی، قصد حذف API را ندارد و هیچ هشداری نیز ایجاد نمی‌کند.

PEP 387: Soft Deprecation را نیز ببینید.

متد ویژه

متدی که به‌طور ضمنی توسط پایتون فراخوانی می‌شود تا عملیاتی خاص را روی یک نوع، مانند جمع، اجرا کند. نام این متدها با دو زیرخط آغاز و با دو زیرخط پایان می‌یابد. متدهای ویژه در Special method names مستند شده‌اند.

کتابخانهٔ استاندارد

مجموعه‌ای از بسته، ماژول و ماژول افزونه که به‌عنوان بخشی از بستهٔ رسمی مفسر پایتون توزیع می‌شوند. اعضای دقیق این مجموعه ممکن است بر اساس سکو، کتابخانه‌های سیستمی موجود یا معیارهای دیگر متفاوت باشند. مستندات آن را می‌توانید در The Python Standard Library پیدا کنید.

همچنین sys.stdlib_module_names را برای فهرستی از همهٔ نام‌های ممکن ماژول‌های کتابخانهٔ استاندارد ببینید.

دستور

دستور بخشی از یک مجموعه (یک «بلوک» کد) است. یک دستور یا یک عبارت است یا یکی از چند ساختار دارای کلیدواژه، مانند if، while یا for.

بررسی‌کنندهٔ نوع ایستا

یک ابزار خارجی که کد پایتون را می‌خواند و آن را تحلیل می‌کند و به‌دنبال مشکلاتی مانند نوع‌های نادرست می‌گردد. همچنین راهنمای نوع و ماژول typing را ببینید.

stdlib

شکل کوتاه‌شدهٔ کتابخانهٔ استاندارد.

ارجاع قوی

در API زبان C پایتون، ارجاع قوی ارجاعی به یک شیء است که کدی که ارجاع را در اختیار دارد، مالک آن است. ارجاع قوی هنگام ایجاد ارجاع با فراخوانی Py_INCREF() گرفته می‌شود و هنگام حذف ارجاع با Py_DECREF() آزاد می‌شود.

از تابع Py_NewRef() می‌توان برای ایجاد یک ارجاع قوی به یک شیء استفاده کرد. معمولاً باید تابع Py_DECREF() پیش از خروج از محدودهٔ ارجاع قوی، روی آن فراخوانی شود تا از نشت یک ارجاع جلوگیری شود.

همچنین ارجاع قرض‌گرفته‌شده را ببینید.

زیرنویس

عبارت درون کروشه‌های یک subscription expression، برای مثال 3 در items[3]. معمولاً برای انتخاب یک المان از یک کانتینر استفاده می‌شود. هنگام زیرنویس‌گذاری یک نگاشت، به آن کلید نیز گفته می‌شود و هنگام زیرنویس‌گذاری یک دنباله، به آن اندیس گفته می‌شود.

اولیه

یک سازهٔ پایه برای هماهنگ‌سازی اجرای چند نخٔ اجرایی، با هدف اطمینان از دسترسی ایمن برای نخ‌های اجرایی به منابع مشترک. ماژول threading پایتون چندین اولیهٔ همگام‌سازی، از جمله Lock، RLock، Semaphore، Condition، Event و Barrier را فراهم می‌کند. افزون بر این، ماژول queue صف‌های چندتولیدکننده، چندمصرف‌کننده‌ای را فراهم می‌کند که به‌ویژه در برنامه‌های چندنخی مفید هستند. این اولیه‌ها به جلوگیری از شرط رقابت و هماهنگ‌سازی اجرای نخ‌های اجرایی کمک می‌کنند. همچنین قفل را ببینید.

t-string
t-strings

لیترال‌های رشته‌ای که با t یا T پیشوندگذاری شده‌اند، معمولاً «t-string» نامیده می‌شوند که شکل کوتاه‌شدهٔ template string literals است.

کدگذاری متن

یک رشته در پایتون دنباله‌ای از نقاط کد یونیکد است (در محدودهٔ U+0000--U+10FFFF). برای ذخیره یا انتقال یک رشته، لازم است آن را به‌صورت دنباله‌ای از بایت‌ها سریال‌سازی کرد.

سریال‌سازی یک رشته به‌صورت دنباله‌ای از بایت‌ها «کدگذاری» نامیده می‌شود و بازسازی رشته از دنبالهٔ بایت‌ها «کدگشایی» نام دارد.

انواع مختلفی از codecs برای سریال‌سازی متن وجود دارند که در مجموع «کدگذاری‌های متن» نامیده می‌شوند.

فایل متنی

یک شیء فایل که می‌تواند اشیای str را بخواند و بنویسد. یک فایل متنی اغلب در واقع به یک جریان دادهٔ بایت‌محور دسترسی دارد و کدگذاری متن را به‌طور خودکار مدیریت می‌کند. نمونه‌هایی از فایل‌های متنی، فایل‌هایی هستند که در حالت متنی باز شده‌اند ('r' یا 'w'sys.stdin، sys.stdout و نمونه‌های io.StringIO.

همچنین برای یک شیء فایل که می‌تواند شیء شبه‌بایت را بخواند و بنویسد، فایل دودویی را ببینید.

وضعیت نخٔ اجرایی

اطلاعاتی که CPython ران‌تایم برای اجرا در یک نخٔ اجرایی سیستم‌عامل استفاده می‌کند. برای مثال، این اطلاعات شامل استثنای فعلی، در صورت وجود، و وضعیت مفسر بایت‌کد است.

هر وضعیت نخٔ اجرایی به یک نخٔ اجرایی سیستم‌عامل واحد وابسته است، اما نخ‌های اجرایی ممکن است وضعیت‌های نخٔ اجرایی متعددی در دسترس داشته باشند. در هر لحظه حداکثر یکی از آن‌ها می‌تواند وضعیت نخٔ متصل باشد.

برای فراخوانی بیشتر API زبان C پایتون، یک وضعیت نخٔ متصل لازم است، مگر اینکه تابعی صراحتاً خلاف آن را مستند کرده باشد. مفسر بایت‌کد فقط در یک وضعیت نخٔ اجرایی پیوست‌شده اجرا می‌شود.

هر وضعیت نخٔ اجرایی به یک مفسر واحد تعلق دارد، اما هر مفسر ممکن است وضعیت‌های نخٔ اجرایی متعددی داشته باشد، از جمله چند وضعیت برای یک نخٔ اجرایی سیستم‌عامل یکسان. وضعیت‌های نخٔ اجرایی از مفسرهای متعدد ممکن است به یک نخٔ اجرایی یکسان وابسته باشند، اما در هر لحظه فقط یکی از آن‌ها می‌تواند در آن نخٔ اجرایی وضعیت نخٔ متصل باشد.

برای اطلاعات بیشتر، Thread State and the Global Interpreter Lock را ببینید.

ایمن برای نخ‌های اجرایی

یک ماژول، تابع یا کلاس که هنگام استفادهٔ هم‌زمان توسط چند نخٔ اجرایی، به‌درستی رفتار می‌کند. کد ایمن برای نخ‌های اجرایی از اولیه مناسب، مانند قفل، برای محافظت از وضعیت تغییرپذیر مشترک استفاده می‌کند یا به‌گونه‌ای طراحی شده است که به‌طور کامل از وضعیت تغییرپذیر مشترک اجتناب کند. در ساخت نخ‌گذاری آزاد، نوع‌های توکار مانند dict، list و set از قفل‌گذاری داخلی برای ایمن‌کردن بسیاری از عملیات در برابر اجرای هم‌زمان نخ‌های اجرایی استفاده می‌کنند، هرچند ایمنی در برابر نخ‌های اجرایی لزوماً تضمین‌شده نیست. کدی که برای نخ‌های اجرایی ایمن نیست، هنگام استفاده در برنامه‌های چندنخی ممکن است دچار شرط رقابت و رقابت داده شود.

توکن

واحد کوچکی از کد منبع که توسط lexical analyzer (که tokenizer نیز نامیده می‌شود) تولید می‌شود. نام‌ها، اعداد، رشته‌ها، عملگرها، نویسه‌های خط جدید و موارد مشابه به‌صورت توکن نمایش داده می‌شوند.

ماژول tokenize تحلیل‌گر واژگانی پایتون را در دسترس قرار می‌دهد. ماژول token حاوی اطلاعاتی دربارهٔ انواع مختلف توکن‌ها است.

رشتهٔ سه‌نقل‌قولی

رشته‌ای که با سه نمونه از یکی از علامت‌های نقل‌قول (") یا آپاستروف (') محصور شده است. با اینکه این رشته‌ها قابلیت جدیدی فراتر از رشته‌های تک‌نقل‌قولی فراهم نمی‌کنند، به دلایل متعددی مفید هستند. آن‌ها به شما اجازه می‌دهند علامت‌های نقل‌قول تکی و دوتایی را بدون خنثی‌سازی درون یک رشته قرار دهید و می‌توانند بدون استفاده از نویسهٔ ادامهٔ خط، چندین خط را دربر بگیرند؛ بنابراین هنگام نوشتن docstringها به‌ویژه مفید هستند.

نوع

نوع یک شیء پایتون تعیین می‌کند که آن شیء از چه نوعی است؛ هر شیء یک نوع دارد. نوع یک شیء به‌عنوان ویژگی __class__ آن در دسترس است یا می‌توان آن را با type(obj) به‌دست آورد.

نام مستعار نوع

مترادفی برای یک نوع که با نسبت‌دادن نوع به یک شناسه ایجاد می‌شود.

نام‌های مستعار نوع برای ساده‌سازی راهنمای نوع مفید هستند. برای مثال:

def remove_gray_shades(
        colors: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
    pass

می‌توانست به این شکل خواناتر شود:

Color = tuple[int, int, int]

def remove_gray_shades(colors: list[Color]) -> list[Color]:
    pass

برای توضیح این قابلیت، typing و PEP 484 را ببینید.

راهنمای نوع

یک حاشیه‌گذاری که نوع مورد انتظار برای یک متغیر، یک ویژگی کلاس، یا یک پارامتر یا مقدار بازگشتی تابع را مشخص می‌کند.

راهنماهای نوع اختیاری هستند و پایتون آن‌ها را اعمال نمی‌کند، اما برای بررسی‌کنندهٔ نوع ایستا مفید هستند. آن‌ها همچنین می‌توانند به IDEها در تکمیل کد و بازآرایی کد کمک کنند.

راهنماهای نوع متغیرهای سراسری، ویژگی‌های کلاس و توابع، اما نه متغیرهای محلی، با استفاده از typing.get_type_hints() قابل دسترسی هستند.

برای توضیح این قابلیت، typing و PEP 484 را ببینید.

خط جدید همگانی

روشی برای تفسیر جریان‌های متنی که در آن همهٔ موارد زیر به‌عنوان پایان یک خط شناخته می‌شوند: قرارداد پایان خط یونیکس '\n'، قرارداد ویندوز '\r\n' و قرارداد قدیمی مکینتاش '\r'. همچنین PEP 278 و PEP 3116 و نیز bytes.splitlines() را برای کاربردی دیگر ببینید.

حاشیه‌نویسی متغیر

یک حاشیه‌گذاری برای یک متغیر یا یک ویژگی کلاس.

هنگام حاشیه‌نویسی یک متغیر یا یک ویژگی کلاس، انتساب اختیاری است:

class C:
    field: 'annotation'

حاشیه‌نویسی‌های متغیر معمولاً برای راهنمای نوع استفاده می‌شوند؛ برای مثال، انتظار می‌رود این متغیر مقادیر int را بپذیرد:

count: int = 0

سینتکس حاشیه‌نویسی متغیر در بخش Annotated assignment statements توضیح داده شده است.

همچنین حاشیه‌گذاری تابع، PEP 484 و PEP 526 را که این قابلیت را توصیف می‌کنند، ببینید. برای بهترین روش‌های کار با حاشیه‌نویسی‌ها نیز Annotations Best Practices را ببینید.

محیط مجازی

یک محیط ران‌تایم ایزوله‌شدهٔ مشارکتی که به کاربران و برنامه‌های پایتون اجازه می‌دهد بسته‌های توزیعی پایتون را بدون تداخل با رفتار سایر برنامه‌های پایتونی در حال اجرا روی همان سیستم، نصب و ارتقا دهند.

همچنین venv را ببینید.

ماشین مجازی

یک رایانه که به‌طور کامل در نرم‌افزار تعریف شده است. ماشین مجازی پایتون بایت‌کد تولیدشده توسط کامپایلر بایت‌کد را اجرا می‌کند.

عملگر والروس

روشی شوخ‌طبعانه برای اشاره به عملگر assignment expression یعنی :=، زیرا اگر سرتان را کمی کج کنید، ظاهر آن تا حدی شبیه یک والروس است.

ذن پایتون

فهرستی از اصول و فلسفه‌های طراحی پایتون که برای درک و استفاده از این زبان مفید هستند. این فهرست با واردکردن «import this» در اعلان تعاملی قابل مشاهده است.