واژهنامه¶
>>>¶اعلان پیشفرض پایتون در پوستهی تعاملی. اغلب برای نمونههای کدی دیده میشود که میتوان آنها را بهصورت تعاملی در مفسر اجرا کرد.
...¶میتواند به موارد زیر اشاره کند:
اعلان پیشفرض پایتون در پوستهی تعاملی هنگام وارد کردن کد برای یک بلوک کد تورفته، زمانی که درون یک جفت جداکنندهی چپ و راست متناظر (پرانتزها، کروشهها، آکولادها یا علامتهای نقلقول سهگانه) قرار دارید، یا پس از مشخص کردن یک دکوراتور.
شکل سهنقطهای شیء Ellipsis.
- کلاس پایهی انتزاعی¶
کلاسهای پایهی انتزاعی با فراهم کردن روشی برای تعریف رابطها، زمانی که تکنیکهای دیگری مانند
hasattr()دستوپاگیر یا بهطور ضمنی نادرست هستند (برای مثال با متدهای جادویی)، نوعدهی اردکی را تکمیل میکنند. ABCها زیرکلاسهای مجازی معرفی میکنند، که کلاسهایی هستند که از یک کلاس دیگر به ارث نمیبرند اما همچنان توسطisinstance()وissubclass()شناخته میشوند؛ مستندات ماژولabcرا ببینید. پایتون همراه با ABCهای توکار بسیاری برای ساختارهای داده (در ماژولcollections.abc)، اعداد (در ماژولnumbers)، جریانها (در ماژولio)، یابندهها و بارگذارهای ایمپورت (در ماژولimportlib.abc) ارائه میشود. شما میتوانید ABCهای سفارشی خود را با ماژولabcایجاد کنید.- توابع حاشیهگذاری¶
فراخوانیپذیری که میتوان آن را برای بازیابی حاشیهگذاری یک شیء فراخوانی کرد. توابع حاشیهگذاری معمولاً توابعی هستند که بهصورت خودکار بهعنوان ویژگی
__annotate__توابع، کلاسها و ماژولها تولید میشوند. توابع حاشیهگذاری زیرمجموعهای از توابع ارزیابی هستند.- حاشیهگذاری¶
برچسبی مرتبط با یک متغیر، یک ویژگی کلاس، یا یک پارامتر تابع یا مقدار بازگشتی، که طبق قرارداد بهعنوان یک راهنمای نوع استفاده میشود.
حاشیهگذاریهای متغیرهای محلی را نمیتوان در زمان رانتایم دسترسی کرد، اما حاشیهگذاریهای متغیرهای سراسری، ویژگیهای کلاس و توابع را میتوان با فراخوانی
annotationlib.get_annotations()بهترتیب روی ماژولها، کلاسها و توابع بازیابی کرد.همچنین به حاشیهنویسی متغیر، حاشیهگذاری تابع، PEP 484، PEP 526 و PEP 649 مراجعه کنید که این قابلیت را توضیح میدهند. همچنین برای بهترین روشها در کار با حاشیهگذاریها، بهترین شیوههای حاشیهنویسی را ببینید.
- آرگومان¶
مقداری که هنگام فراخوانی یک تابع (یا متد) به آن تابع ارسال میشود. دو نوع آرگومان وجود دارد:
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))
آرگومانها به متغیرهای محلی نامگذاریشده در بدنهی یک تابع اختصاص داده میشوند. برای قوانین حاکم بر این تخصیص، بخش فراخوانیها را ببینید. از نظر سینتکس، هر عبارتی میتواند برای نمایش یک آرگومان استفاده شود؛ مقدار ارزیابیشده به متغیر محلی اختصاص داده میشود.
همچنین به ورودی واژهنامهای پارامتر، پرسش متداول دربارهی تفاوت بین آرگومانها و پارامترها و PEP 362 مراجعه کنید.
- مدیر زمینهی ناهمگام¶
شیءای که با تعریف متدهای
__aenter__()و__aexit__()، محیط مشاهدهشده در یک دستورasync withرا کنترل میکند. این قابلیت توسط PEP 492 معرفی شد.- تولیدگر ناهمگام¶
بهصورت غیررسمی برای اشاره به یک تابع تولیدگر ناهمگام یا یک پیمایشگر تولیدگر ناهمگام، بسته به زمینه، استفاده میشود. اصطلاحات رسمی تابع تولیدگر ناهمگام و پیمایشگر تولیدگر ناهمگام در عمل کمتر استفاده میشوند؛ «تولیدگر ناهمگام» بهتنهایی تقریباً همیشه کافی است.
- تابع تولیدگر ناهمگام¶
تابعی که یک پیمایشگر تولیدگر ناهمگام بازمیگرداند. این تابع شبیه یک تابع همروال که با
async defتعریف شده است به نظر میرسد، با این تفاوت که شامل عبارتهایyieldبرای تولید مجموعهای از مقادیر قابل استفاده در یک حلقهیasync forاست. PEP 525 را ببینید.یک تابع تولیدگر ناهمگام ممکن است علاوه بر عبارتهای
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()، ویژگیای با نامی که یک شناسه مطابق تعریف نامها (شناسهها و کلیدواژهها) نیست به آن اختصاص داد. چنین ویژگیای با استفاده از یک عبارت نقطهای قابل دسترسی نخواهد بود و باید در عوض با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()میتواند برای ایجاد یک ارجاع قوی جدید استفاده شود.- شیء شبهبایت¶
شیءای که از پروتکل بافر پشتیبانی میکند و میتواند یک بافر 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 بهطور همزمان اجرا کنند (به موازیسازی مراجعه کنید).- تغییر همزمان¶
هنگامی که چندین نخ در یک زمان دادههای اشتراکی را تغییر میدهند. تغییر همزمان بدون همگامسازی مناسب میتواند باعث شرط رقابت شود و همچنین ممکن است یک رقابت داده، خرابی داده یا هر دو را ایجاد کند.
- زمینه¶
این اصطلاح بسته به محل و نحوهی استفاده، معانی متفاوتی دارد. برخی از معانی رایج:
وضعیت یا محیط موقتی که توسط یک مدیر زمینه از طریق یک دستور
withایجاد میشود.مجموعهی مقیدسازیهای کلید-مقدار مرتبط با یک شیء
contextvars.Contextخاص و قابل دسترسی از طریق اشیایContextVar. همچنین متغیر زمینه را ببینید.یک شیء
contextvars.Context. همچنین زمینه فعلی را ببینید.
- پروتکل مدیریت زمینه¶
متدهای
__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): ...
همین مفهوم برای کلاسها نیز وجود دارد، اما استفاده از آن در آنجا کمتر رایج است. برای اطلاعات بیشتر دربارهی دکوراتورها، مستندات تابع و کلاس را ببینید.
- توصیفگر¶
هر شیءای که متدهای
__get__()،__set__()یا__delete__()را تعریف کند. هنگامی که یک ویژگی کلاس یک توصیفگر باشد، رفتار اتصال ویژهی آن هنگام جستوجوی ویژگی فعال میشود. معمولاً استفاده از a.b برای دریافت، تنظیم یا حذف یک ویژگی، شیء با نام b را در دیکشنری کلاس a جستوجو میکند، اما اگر b یک توصیفگر باشد، متد مربوط به توصیفگر فراخوانی میشود. درک توصیفگرها کلیدی برای درک عمیق پایتون است، زیرا آنها پایهی بسیاری از قابلیتها از جمله توابع، متدها، ویژگیها، متدهای کلاس، متدهای ایستا و ارجاع به کلاسهای بالادستی هستند.برای اطلاعات بیشتر دربارهی متدهای توصیفگرها، پیادهسازی توصیفگرها یا Descriptor How To Guide را ببینید.
- دیکشنری¶
یک آرایهی انجمنی که در آن کلیدهای دلخواه به مقادیر نگاشت میشوند. کلیدها میتوانند هر شیءای باشند که متدهای
__hash__()و__eq__()را داشته باشد. در Perl به آن hash گفته میشود.- درک دیکشنری¶
روشی فشرده برای پردازش همه یا بخشی از عناصر یک پیمایشپذیر و بازگرداندن یک دیکشنری با نتایج.
results = {n: n ** 2 for n in range(10)}یک دیکشنری ایجاد میکند که شامل کلیدnنگاشتشده به مقدارn ** 2است. نمایش فهرستها، مجموعهها و دیکشنریها را ببینید.- نمای دیکشنری¶
اشیایی که توسط
dict.keys()،dict.values()وdict.items()بازگردانده میشوند، نماهای دیکشنری نامیده میشوند. آنها نمایی پویا از ورودیهای دیکشنری فراهم میکنند، به این معنا که هنگام تغییر دیکشنری، نما نیز این تغییرات را منعکس میکند. برای تبدیل نمای دیکشنری به یک فهرست کامل ازlist(dictview)استفاده کنید. Dictionary view objects را ببینید.- رشتهی مستندات¶
یک مقدار رشتهای که بهعنوان اولین عبارت در یک کلاس، تابع یا ماژول ظاهر میشود. اگرچه هنگام اجرای بدنه نادیده گرفته میشود، توسط کامپایلر شناسایی شده و در ویژگی
__doc__کلاس، تابع یا ماژول دربرگیرنده قرار داده میشود. از آنجا که از طریق دروننگری در دسترس است، مکان کانونیکال برای مستندسازی شیء محسوب میشود.- نوعدهی اردکی¶
سبک برنامهنویسیای که برای تعیین داشتن رابط مناسب توسط یک شیء، به نوع آن نگاه نمیکند؛ در عوض، متد یا ویژگی بهسادگی فراخوانی یا استفاده میشود («اگر شبیه اردک است و مانند اردک صدا میدهد، پس باید اردک باشد.»). با تأکید بر رابطها بهجای نوعهای خاص، کد با طراحی خوب با امکان جایگزینی چندریخت، انعطافپذیری خود را افزایش میدهد. نوعدهی اردکی از آزمونهای مبتنی بر
type()یاisinstance()اجتناب میکند. (با این حال، توجه داشته باشید که نوعدهی اردکی میتواند با کلاس پایهی انتزاعی تکمیل شود.) در عوض، معمولاً از آزمونهایhasattr()یا برنامهنویسی EAFP استفاده میکند.- داندر¶
یک شکل کوتاه و غیررسمی برای «دو زیرخط» که هنگام صحبت دربارهی یک متد ویژه استفاده میشود. برای مثال،
__init__اغلب «داندر اینیت» تلفظ میشود.- EAFP¶
آسانتر است که درخواست بخشش کنید تا اجازه. این سبک رایج کدنویسی پایتون وجود کلیدها یا ویژگیهای معتبر را فرض میکند و اگر این فرض نادرست باشد، استثناها را دریافت میکند. این سبک پاک و سریع با وجود تعداد زیادی دستورهای
tryوexceptشناخته میشود. این روش در تضاد با سبک LBYL است که در بسیاری از زبانهای دیگر مانند C رایج است.- تابع ارزیابی¶
تابعی که میتوان آن را برای ارزیابی یک ویژگی با ارزیابی تنبل یک شیء فراخوانی کرد، مانند مقدار نامهای مستعار نوع که با دستور
typeایجاد شدهاند.- exhausted¶
An iterator that has produced all of its values is said to be exhausted. Further attempts to get the next value (for example, calls to
next()) raiseStopIteration(orStopAsyncIterationin the case of an asynchronous iterator).- عبارت¶
A piece of syntax which can be evaluated to some value. In other words, an expression is an accumulation of expression elements like literals, names, attribute access, operators or function calls which all return a value. Not all language constructs are expressions. There are also statements which cannot be used as expressions, such as
while. Assignments are also statements, not expressions.- ماژول توسعهای¶
ماژول نوشتهشده به زبان C یا C++ که از API زبان C پایتون برای تعامل با هسته و کد کاربر استفاده میکند.
- افاسترینگ¶
- افاسترینگها¶
رشتههای لفظی که با
fیاFپیشوندگذاری شدهاند، معمولاً «افاسترینگ» نامیده میشوند که کوتاهشدهی افاسترینگها است. همچنین PEP 498 را ببینید.- شیء پرونده¶
شیءای که یک API فایلمحور (با متدهایی مانند
read()یاwrite()) برای یک منبع زیربنایی ارائه میدهد. بسته به نحوهی ایجاد آن، یک شیء پرونده میتواند دسترسی به یک پرونده واقعی روی دیسک یا نوع دیگری از فضای ذخیرهسازی یا دستگاه ارتباطی را مدیریت کند (برای مثال ورودی/خروجی استاندارد، بافرهای درونحافظهای، سوکتها، پایپها و غیره). اشیای پرونده همچنین با نامهای file-like objects یا streams شناخته میشوند.در واقع سه دسته از اشیای پرونده وجود دارد: پرونده دودویی خام، پرونده دودویی بافرشده و پرونده متنی. رابطهای آنها در ماژول
ioتعریف شدهاند. روش کانونیکال ایجاد یک شیء پرونده، استفاده از تابعopen()است.- شیء شبهپرونده¶
هممعنای شیء پرونده.
- کدگذاری سیستم پرونده و هندلر خطا¶
کدگذاری و هندلر خطایی که پایتون برای کدگشایی بایتها از سیستمعامل و کدگذاری یونیکد به سیستمعامل استفاده میکند.
کدگذاری سیستم پرونده باید تضمین کند که همهی بایتهای کمتر از ۱۲۸ را با موفقیت کدگشایی میکند. اگر کدگذاری سیستم پرونده نتواند این تضمین را ارائه دهد، توابع API ممکن است استثنای
UnicodeErrorایجاد کنند.از توابع
sys.getfilesystemencoding()وsys.getfilesystemencodeerrors()میتوان برای دریافت کدگذاری سیستم پرونده و هندلر خطا استفاده کرد.کدگذاری سیستم پرونده و هندلر خطا در هنگام راهاندازی پایتون توسط تابع
PyConfig_Read()پیکربندی میشوند: اعضایfilesystem_encodingوfilesystem_errorsازPyConfigرا ببینید.همچنین کدگذاری locale را ببینید.
- یابنده¶
شیءای که تلاش میکند بارگذار مربوط به ماژولی را که در حال ایمپورت شدن است پیدا کند.
دو نوع یابنده وجود دارد: یابندهی مسیر فراداده برای استفاده با
sys.meta_pathو یابندهی ورودی مسیر برای استفاده باsys.path_hooks.برای جزئیات بسیار بیشتر، یابندهها و بارگذارها و
importlibرا ببینید.- تقسیم کف¶
تقسیم ریاضی که به نزدیکترین عدد صحیح پایین گرد میشود. عملگر تقسیم کف
//است. برای مثال، عبارت11 // 4به2ارزیابی میشود، در حالی که تقسیم حقیقی با عدد اعشاری مقدار2.75را بازمیگرداند. توجه داشته باشید که(-11) // 4برابر-3است، زیرا-2.75به سمت پایین گرد میشود. PEP 238 را ببینید.- نخگذاری آزاد¶
مدل نخای که در آن چندین نخ میتوانند بایتکد پایتون را بهطور همزمان درون همان مفسر اجرا کنند. این در تضاد با قفل مفسر سراسری است که اجازه میدهد فقط یک نخ در هر زمان بایتکد پایتون را اجرا کند. PEP 703 را ببینید.
- ساخت نخآزاد¶
ساختی از CPython که از نخگذاری آزاد پشتیبانی میکند و با استفاده از گزینهی
--disable-gilپیش از کامپایل پیکربندی شده است.پشتیبانی پایتون از نخبندی آزاد را ببینید.
- متغیر آزاد¶
بهصورت رسمی، همانطور که در language execution model تعریف شده است، یک متغیر آزاد هر متغیری است که در یک فضای نام استفاده میشود اما در آن فضای نام یک متغیر محلی نیست. برای نمونه، متغیر بستار را ببینید. از نظر عملی، بهدلیل نام ویژگی
codeobject.co_freevars، این اصطلاح گاهی بهعنوان مترادفی برای متغیر بستار نیز استفاده میشود.- تابع¶
مجموعهای از دستورها که مقداری را به یک فراخواننده بازمیگرداند. همچنین میتواند صفر یا چند آرگومان دریافت کند که ممکن است در اجرای بدنه استفاده شوند. همچنین پارامتر، متد و بخش تابع را ببینید.
- حاشیهگذاری تابع¶
یک حاشیهگذاری برای پارامتر یک تابع یا مقدار بازگشتی.
حاشیهگذاریهای تابع معمولاً برای راهنمای نوع استفاده میشوند: برای مثال، انتظار میرود این تابع دو آرگومان
intدریافت کند و همچنین یک مقدار بازگشتیintداشته باشد:def sum_two_numbers(a: int, b: int) -> int: return a + b
سینتکس حاشیهگذاری تابع در بخش تابع توضیح داده شده است.
به حاشیهنویسی متغیر و PEP 484 مراجعه کنید که این قابلیت را توضیح میدهند. همچنین برای بهترین روشها در کار با حاشیهگذاریها، بهترین شیوههای حاشیهنویسی را ببینید.
- __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 را ببینید.- پیمایشگر تولیدگر¶
شیءای که توسط یک تابع تولیدگر یا یک عبارت تولیدگر ایجاد میشود.
هر
yieldپردازش را بهطور موقت متوقف میکند و وضعیت اجرا (شامل متغیرهای محلی و دستورهای try در انتظار) را به خاطر میسپارد. هنگامی که پیمایشگر تولیدگر ادامهی اجرا میدهد، از همان نقطهای که متوقف شده بود ادامه میدهد (برخلاف توابع که در هر فراخوانی از ابتدا شروع میشوند).پیمایشگرهای تولیدگر همچنین متد
send()را برای ارسال یک مقدار به تولیدگر متوقفشده و متدthrow()را برای پرتاب یک استثنا در نقطهای که تولیدگر در آن متوقف شده است، پیادهسازی میکنند. بخش متدهای تولیدگر-پیمایشگر را ببینید.- عبارت تولیدگر¶
یک عبارت که یک پیمایشگر بازمیگرداند. این عبارت شبیه یک عبارت معمولی است که پس از آن یک بند
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 مبتنی بر هش¶
یک پرونده نهانگاه بایتکد که بهجای زمان آخرین تغییر پرونده منبع متناظر، از هش آن برای تعیین اعتبار خود استفاده میکند. بیاعتبارسازی بایتکد نهانشده را ببینید.
- قابل درهمسازی¶
یک شیء قابل درهمسازی است اگر دارای یک مقدار هش باشد که در طول عمر آن هرگز تغییر نمیکند (به یک متد
__hash__()نیاز دارد) و بتوان آن را با اشیای دیگر مقایسه کرد (به یک متد__eq__()نیاز دارد). اشیای قابل درهمسازی که برابر مقایسه میشوند باید مقدار هش یکسانی داشته باشند.قابل درهمسازی بودن باعث میشود یک شیء بهعنوان کلید دیکشنری و عضو مجموعه قابل استفاده باشد، زیرا این ساختارهای داده مقدار هش را بهصورت داخلی استفاده میکنند.
بیشتر اشیای توکار تغییرناپذیر پایتون قابل درهمسازی هستند؛ محفظههای تغییرپذیر (مانند فهرستها یا دیکشنریها) قابل درهمسازی نیستند؛ محفظههای تغییرناپذیر (مانند تاپلها یا frozensetها) فقط در صورتی قابل درهمسازی هستند که عناصرشان قابل درهمسازی باشند. اشیایی که نمونههایی از کلاسهای تعریفشده توسط کاربر هستند، بهطور پیشفرض قابل درهمسازی هستند. همهی آنها نابرابر مقایسه میشوند (بهجز با خودشان) و مقدار هش آنها از
id()آنها مشتق میشود.- IDLE¶
یک محیط توسعه و یادگیری یکپارچه برای پایتون. IDLE --- ویرایشگر و پوسته پایتون یک محیط ویرایشگر و مفسر پایه است که همراه با توزیع استاندارد پایتون ارائه میشود.
- نامیرا¶
اشیای نامیرا یک جزئیات پیادهسازی 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این کار را بهطور خودکار برای شما انجام میدهد و یک متغیر موقتِ بدون نام ایجاد میکند تا در طول حلقه پیمایشگر را نگه دارد. همچنین پیمایشگر، دنباله و تولیدگر را ببینید.- پیمایشگر¶
An object representing a stream of data. Repeated calls to the iterator's
__next__()method (or passing it to the built-in functionnext()) return successive items in the stream. When no more data are available aStopIterationexception is raised instead. At this point, the iterator object is exhausted and any further calls to its__next__()method just raiseStopIterationagain. Iterators are required to have an__iter__()method that returns the iterator object itself so every iterator is also iterable and may be used in most places where other iterables are accepted. One notable exception is code which attempts multiple iteration passes. A container object (such as alist) produces a fresh new iterator each time you pass it to theiter()function or use it in aforloop. Attempting this with an iterator will just return the same exhausted iterator object used in the previous iteration pass, making it appear like an empty container.اطلاعات بیشتر را میتوان در Iterator Types یافت.
CPython بهطور سازگار الزام تعریف متد
__iter__()برای یک پیمایشگر را اعمال نمیکند. همچنین توجه داشته باشید که CPython نخگذاری آزاد رفتار ایمن برای نخهای اجرایی را برای عملیات پیمایشگرها تضمین نمیکند.- کلید¶
مقداری که یک ورودی را در یک نگاشت شناسایی میکند. همچنین زیرنویس را ببینید.
- تابع کلید¶
یک تابع کلید یا تابع همترازی، یک شیء فراخوانیپذیر است که مقداری را بازمیگرداند که برای مرتبسازی یا ترتیبدهی استفاده میشود. برای مثال،
locale.strxfrm()برای تولید یک کلید مرتبسازی که از قراردادهای مرتبسازی خاص یک locale آگاه است استفاده میشود.تعدادی از ابزارهای پایتون، توابع کلید را برای کنترل نحوهی ترتیبدهی یا گروهبندی المانها میپذیرند. این ابزارها شامل
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¶
پیش از جهش نگاه کنید (Look Before You Leap). این سبک کدنویسی پیششرطها را پیش از انجام فراخوانیها یا جستوجوها بهطور صریح آزمایش میکند. این سبک در تضاد با رویکرد EAFP است و با وجود تعداد زیادی دستور
ifشناخته میشود.در یک محیط چندنخی، رویکرد LBYL میتواند خطر ایجاد یک شرط رقابت بین «نگاه کردن» و «جهش کردن» را به همراه داشته باشد. برای مثال، کد
if key in mapping: return mapping[key]ممکن است شکست بخورد اگر نخای دیگر پس از آزمون، اما پیش از جستوجو، key را از mapping حذف کند. این مشکل را میتوان با قفل یا با استفاده از رویکرد EAFP حل کرد. همچنین ایمن برای نخهای اجرایی را ببینید.- تحلیلگر واژگانی¶
نام رسمی برای tokenizer؛ توکن را ببینید.
- فهرست¶
A built-in Python sequence. Despite its name it is more akin to an array in other languages than to a linked list since access to elements is O(1). See Time complexity of operations on built-in types.
- درک فهرستی¶
روشی فشرده برای پردازش همه یا بخشی از المانهای یک دنباله و بازگرداندن یک فهرست با نتایج.
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()را تعریف کند. یک بارگذار معمولاً توسط یک یابنده بازگردانده میشود. همچنین ببینید:- کدگذاری locale¶
در یونیکس، این همان کدگذاری locale LC_CTYPE است. میتوان آن را با
locale.setlocale(locale.LC_CTYPE, new_locale)تنظیم کرد.در ویندوز، این همان صفحهی کد ANSI است (برای مثال
"cp1252").در Android و VxWorks، پایتون از
"utf-8"بهعنوان کدگذاری locale استفاده میکند.از
locale.getencoding()میتوان برای دریافت کدگذاری locale استفاده کرد.همچنین کدگذاری سیستم پرونده و هندلر خطا را ببینید.
- متد جادویی¶
یک مترادف غیررسمی برای متد ویژه.
- نگاشت¶
یک شیء ظرفی که از جستوجوی کلیدهای دلخواه پشتیبانی میکند و متدهای مشخصشده در
collections.abc.Mappingیاcollections.abc.MutableMappingabstract base classes را پیادهسازی میکند. نمونهها شاملdict،collections.defaultdict،collections.OrderedDictوcollections.Counterهستند.- یابندهی مسیر فراداده¶
یک یابنده که از جستوجوی
sys.meta_pathبازگردانده میشود. یابندههای مسیر فراداده با یابندهی ورودی مسیر مرتبط هستند، اما با آنها تفاوت دارند.برای متدهایی که یابندههای مسیر فراداده پیادهسازی میکنند،
importlib.abc.MetaPathFinderرا ببینید.- فراکلاس¶
کلاس یک کلاس. تعریفهای کلاس یک نام کلاس، یک دیکشنری کلاس و یک فهرست از کلاسهای پایه ایجاد میکنند. فراکلاس مسئول دریافت این سه آرگومان و ایجاد کلاس است. بیشتر زبانهای برنامهنویسی شیءگرا یک پیادهسازی پیشفرض ارائه میکنند. چیزی که پایتون را ویژه میکند این است که امکان ایجاد فراکلاسهای سفارشی وجود دارد. بیشتر کاربران هرگز به این ابزار نیاز پیدا نمیکنند، اما هنگامی که نیاز به آن پیش بیاید، فراکلاسها میتوانند راهحلهای قدرتمند و ظریفی ارائه دهند. از آنها برای ثبت دسترسی به ویژگیها، افزودن ایمنی نخای، پیگیری ایجاد شیء، پیادهسازی تکنمونهها و بسیاری کارهای دیگر استفاده شده است.
اطلاعات بیشتر را میتوان در فراکلاسها یافت.
- متد¶
تابعی که درون بدنهی یک کلاس تعریف شده است. اگر بهعنوان یک ویژگی از یک نمونهی آن کلاس فراخوانی شود، متد شیء نمونه را بهعنوان نخستین آرگومان خود دریافت میکند (که معمولاً
selfنامیده میشود). تابع و محدودهی تودرتو را ببینید.- ترتیب حل متد¶
ترتیب حل متد، ترتیبی است که در آن کلاسهای پایه هنگام جستوجوی یک عضو بررسی میشوند. برای جزئیات الگوریتمی که مفسر پایتون از انتشار ۲.۳ به بعد استفاده میکند، ترتیب حل متد در پایتون 2.3 را ببینید.
- ماژول¶
شیءای که بهعنوان واحد سازماندهی کد پایتون عمل میکند. ماژولها یک فضای نام دارند که شامل اشیای دلخواه پایتون است. ماژولها از طریق فرایند ایمپورت کردن در پایتون بارگذاری میشوند.
همچنین بسته را ببینید.
- مشخصات ماژول¶
فضای نامی که شامل اطلاعات مرتبط با ایمپورت است و برای بارگذاری یک ماژول استفاده میشود. یک نمونه از
importlib.machinery.ModuleSpec.همچنین مشخصات ماژول را ببینید.
- MRO¶
ترتیب حل متد را ببینید.
- تغییرپذیر¶
یک شیء که وضعیت آن در طول اجرای برنامه اجازهی تغییر دارد. در برنامههای چندنخی، اشیای تغییرپذیری که بین نخها اشتراکگذاری میشوند، برای جلوگیری از شرط رقابت به همگامسازی دقیق نیاز دارند. همچنین تغییرناپذیر، ایمن برای نخهای اجرایی و تغییر همزمان را ببینید.
- تاپل نامدار¶
اصطلاح «تاپل نامدار» برای هر نوع یا کلاسی بهکار میرود که از tuple ارثبری میکند و المانهای قابل دسترسی با اندیس آن، با استفاده از ویژگیهای نامدار نیز قابل دسترسی هستند. این نوع یا کلاس ممکن است ویژگیهای دیگری نیز داشته باشد.
چندین نوع توکار، تاپل نامدار هستند، از جمله مقادیری که توسط
time.localtime()وos.stat()بازگردانده میشوند. نمونهی دیگرsys.float_infoاست:>>> sys.float_info[1] # indexed access 1024 >>> sys.float_info.max_exp # named field access 1024 >>> isinstance(sys.float_info, tuple) # kind of tuple True
برخی تاپلهای نامدار، نوعهای توکار هستند (مانند نمونههای بالا). روش دیگر، ایجاد یک تاپل نامدار از طریق یک تعریف کلاس معمولی است که از
tupleارثبری میکند و فیلدهای نامدار را تعریف میکند. چنین کلاسی را میتوان بهصورت دستی نوشت، یا با ارثبری ازtyping.NamedTuple، یا با تابع کارخانهیcollections.namedtuple()ایجاد کرد. دو روش اخیر همچنین چند متد اضافی اضافه میکنند که ممکن است در تاپلهای نامدار دستنویس یا توکار وجود نداشته باشند.- فضای نام¶
محلی که یک متغیر در آن ذخیره میشود. فضای نامها بهصورت دیکشنری پیادهسازی میشوند. فضای نام های محلی، سراسری و توکار، همچنین فضای نام های تودرتو در اشیا (در متدها) وجود دارند. فضای نامها با جلوگیری از تداخل نامها، پیمانهای بودن را پشتیبانی میکنند. برای نمونه، توابع
builtins.openوos.open()با استفاده از فضای نام های خود از یکدیگر متمایز میشوند. فضای نامها همچنین با مشخص کردن اینکه کدام ماژول یک تابع را پیادهسازی میکند، به خوانایی و نگهداریپذیری کمک میکنند. برای نمونه، نوشتنrandom.seed()یاitertools.islice()مشخص میکند که این توابع بهترتیب توسط ماژولهایrandomوitertoolsپیادهسازی شدهاند.- بستهی فضای نام¶
یک بسته که فقط بهعنوان ظرفی برای زیربستهها عمل میکند. بستههای فضای نام ممکن است نمایش فیزیکی نداشته باشند و بهطور مشخص مانند یک بستهی معمولی نیستند، زیرا پرونده
__init__.pyندارند.بستههای فضای نام به چندین بستهی قابل نصب مستقل اجازه میدهند که یک بستهی والد مشترک داشته باشند. در غیر این صورت، توصیه میشود از یک بستهی معمولی استفاده کنید.
برای اطلاعات بیشتر، PEP 420 و بستههای فضای نام را ببینید.
همچنین ماژول را ببینید.
- کد بومی¶
کدی که به دستورهای ماشین کامپایل شده و مستقیماً روی پردازنده اجرا میشود، برخلاف کدی که تفسیر میشود یا در یک ماشین مجازی اجرا میشود. در زمینهی پایتون، کد بومی معمولاً به کد C، C++، Rust یا Fortran در ماژول توسعهای اشاره دارد که میتوانند از پایتون فراخوانی شوند. همچنین ماژول توسعهای را ببینید.
- محدودهی تودرتو¶
توانایی ارجاع به یک متغیر در یک تعریف دربرگیرنده. برای مثال، تابعی که داخل تابع دیگری تعریف شده است میتواند به متغیرهای تابع بیرونی دسترسی داشته باشد. توجه کنید که محدودههای تودرتو بهصورت پیشفرض فقط برای ارجاع دادن و نه برای انتساب کار میکنند. متغیرهای محلی هم در نزدیکترین محدوده خوانده و نوشته میشوند. به همین ترتیب، متغیرهای سراسری از فضای نام سراسری خوانده و در آن نوشته میشوند. کلیدواژهی
nonlocalامکان نوشتن در محدودههای بیرونی را فراهم میکند.- کلاس سبک جدید¶
نام قدیمی برای گونهای از کلاسها که اکنون برای همهی اشیای کلاس استفاده میشود. در نسخههای قدیمیتر پایتون، فقط کلاسهای سبک جدید میتوانستند از قابلیتهای جدیدتر و انعطافپذیر پایتون مانند
__slots__، توصیفگرها، ویژگیها،__getattribute__()، متدهای کلاس و متدهای ایستا استفاده کنند.- غیرقطعی¶
رفتاری که در آن نتیجهی یک برنامه میتواند بین اجراهای مختلف با ورودیهای یکسان متفاوت باشد. در برنامههای چندنخی، رفتار غیرقطعی اغلب از شرط رقابت ناشی میشود که در آن زمانبندی نسبی یا درهمتنیدگی نخها بر نتیجه تأثیر میگذارد. همگامسازی مناسب با استفاده از قفل و دیگر اولیه همگامسازی به تضمین رفتار قطعی کمک میکند.
- شیء¶
هر دادهای با وضعیت (ویژگیها یا مقدار) و رفتار تعریفشده (متدها). همچنین کلاس پایهی نهایی هر کلاس سبک جدید.
- محدودهی بهینهشده¶
محدودهای که در آن نامهای متغیرهای محلی هدف هنگام کامپایل کد بهطور قابل اطمینانی برای کامپایلر شناخته شدهاند و امکان بهینهسازی دسترسی خواندن و نوشتن به این نامها فراهم میشود. فضای نام های محلی برای توابع، تولیدگرها، همروالها، درکها و عبارتهای تولیدگر به این روش بهینه میشوند. توجه کنید: بیشتر بهینهسازیهای مفسر روی همهی محدودهها اعمال میشوند؛ تنها بهینهسازیهایی که به مجموعهی شناختهشدهای از نامهای متغیرهای محلی و غیرمحلی وابسته هستند، به محدودههای بهینهشده محدود میشوند.
- ماژول اختیاری¶
یک ماژول توسعهای که بخشی از کتابخانهی استاندارد است، اما ممکن است در برخی ساختهای CPython وجود نداشته باشد؛ معمولاً به دلیل نبود کتابخانههای شخص ثالث یا در دسترس نبودن ماژول برای یک سکوی مشخص.
برای فهرستی از ماژولهای اختیاری که به کتابخانههای شخص ثالث نیاز دارند، نیازمندیهای ماژولهای اختیاری را ببینید.
- بسته¶
یک ماژول پایتون که میتواند شامل زیرماژولها یا بهصورت بازگشتی، زیربستهها باشد. از نظر فنی، یک بسته یک ماژول پایتون با ویژگی
__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، بخش تابع و 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'}تولید میکند. نمایش فهرستها، مجموعهها و دیکشنریها را ببینید.- توزیع تکگانه¶
نوعی توزیع تابع عام که در آن پیادهسازی بر اساس نوع یک آرگومان واحد انتخاب میشود.
- برش¶
یک شیء از نوع
sliceکه برای توصیف بخشی از یک دنباله استفاده میشود. یک شیء برش هنگام استفاده از شکل slicing در نمادگذاری زیرنویسی، با دو نقطه درون کروشهها، مانندvariable_name[1:3:5]، ایجاد میشود.- منسوخسازی نرم¶
از یک API که بهصورت منسوخسازی نرم علامتگذاری شده است نباید در کد جدید استفاده شود، اما استفاده از آن در کدهای موجود ایمن است. این API همچنان مستندسازی و آزمایش میشود، اما دیگر بهبود داده نخواهد شد.
منسوخسازی نرم، برخلاف منسوخسازی معمولی، قصد حذف API را ندارد و هیچ هشداری نیز ایجاد نمیکند.
PEP 387: Soft Deprecation را نیز ببینید.
- متد ویژه¶
متدی که بهطور ضمنی توسط پایتون فراخوانی میشود تا عملیاتی خاص را روی یک نوع، مانند جمع، اجرا کند. نام این متدها با دو زیرخط آغاز و با دو زیرخط پایان مییابد. متدهای ویژه در نام متدهای ویژه مستند شدهاند.
- کتابخانهی استاندارد¶
مجموعهای از بسته، ماژول و ماژول افزونه که بهعنوان بخشی از بستهی رسمی مفسر پایتون توزیع میشوند. اعضای دقیق این مجموعه ممکن است بر اساس سکو، کتابخانههای سیستمی موجود یا معیارهای دیگر متفاوت باشند. مستندات آن را میتوانید در The Python standard library پیدا کنید.
همچنین
sys.stdlib_module_namesرا برای فهرستی از همهی نامهای ممکن ماژولهای کتابخانهی استاندارد ببینید.- دستور¶
دستور بخشی از یک بدنه (یک «بلوک» کد) است. یک دستور یا یک عبارت است یا یکی از چند ساختار دارای کلیدواژه، مانند
if،whileیاfor.- بررسیگر نوع ایستا¶
یک ابزار خارجی که کد پایتون را میخواند و آن را تحلیل میکند و بهدنبال مشکلاتی مانند نوعهای نادرست میگردد. همچنین راهنمای نوع و ماژول
typingرا ببینید.- stdlib¶
شکل کوتاهشدهی کتابخانهی استاندارد.
- دزدیدن¶
در C API پایتون، «دزدیدن» یک آرگومان به این معناست که مالکیت آرگومان به تابع فراخوانیشده منتقل میشود. فراخواننده نباید پس از فراخوانی از آن ارجاع استفاده کند. بهطور کلی، توابعی که یک آرگومان را «میدزدند»، این کار را حتی در صورت شکست نیز انجام میدهند.
برای توضیح کامل، بخش جزئیات شمارش ارجاع را ببینید.
- ارجاع قوی¶
در API زبان C پایتون، ارجاع قوی ارجاعی به یک شیء است که کدی که ارجاع را در اختیار دارد، مالک آن است. ارجاع قوی هنگام ایجاد ارجاع با فراخوانی
Py_INCREF()گرفته میشود و هنگام حذف ارجاع باPy_DECREF()آزاد میشود.از تابع
Py_NewRef()میتوان برای ایجاد یک ارجاع قوی به یک شیء استفاده کرد. معمولاً باید تابعPy_DECREF()پیش از خروج از محدودهی ارجاع قوی، روی آن فراخوانی شود تا از نشت یک ارجاع جلوگیری شود.همچنین ارجاع قرضگرفتهشده را ببینید.
- زیرنویس¶
عبارت درون کروشههای یک نمادگذاری زیرنویسی، برای مثال
3درitems[3]. معمولاً برای انتخاب یک المان از یک ظرف استفاده میشود. هنگام زیرنویسگذاری یک نگاشت، به آن کلید نیز گفته میشود و هنگام زیرنویسگذاری یک دنباله، به آن اندیس گفته میشود.- اولیه همگامسازی¶
یک سازهی پایه برای هماهنگسازی اجرای چند نخ اجرایی، با هدف اطمینان از دسترسی ایمن برای نخهای اجرایی به منابع مشترک. ماژول
threadingپایتون چندین اولیهی همگامسازی، از جملهLock،RLock،Semaphore،Condition،EventوBarrierرا فراهم میکند. افزون بر این، ماژولqueueصفهای چندتولیدکننده، چندمصرفکنندهای را فراهم میکند که بهویژه در برنامههای چندنخی مفید هستند. این اولیهها به جلوگیری از شرط رقابت و هماهنگسازی اجرای نخهای اجرایی کمک میکنند. همچنین قفل را ببینید.- تیاسترینگ¶
- تیاسترینگها¶
مقادیر لفظی رشتهای که با
tیاTپیشوندگذاری شدهاند، معمولاً «t-string» نامیده میشوند که شکل کوتاهشدهی تیاسترینگها است.- کدگذاری متن¶
یک رشته در پایتون دنبالهای از نقاط کد یونیکد است (در محدودهی
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حاوی اطلاعاتی دربارهی انواع مختلف توکنها است.- رشتهی سهنقلقولی¶
رشتهای که با سه نمونه از یکی از علامتهای نقلقول (") یا آپاستروف (') محصور شده است. با اینکه این رشتهها قابلیت جدیدی فراتر از رشتههای تکنقلقولی فراهم نمیکنند، به دلایل متعددی مفید هستند. آنها به شما اجازه میدهند علامتهای نقلقول تکی و دوتایی را بدون خنثیسازی درون یک رشته قرار دهید و میتوانند بدون استفاده از نویسهی ادامهی خط، چندین خط را دربر بگیرند؛ بنابراین هنگام نوشتن رشته مستندات بهویژه مفید هستند.
- نوع¶
نوع یک شیء پایتون تعیین میکند که آن شیء از چه نوعی است؛ هر شیء یک نوع دارد. نوع یک شیء بهعنوان ویژگی
__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
- راهنمای نوع¶
یک حاشیهگذاری که نوع مورد انتظار برای یک متغیر، یک ویژگی کلاس، یا یک پارامتر یا مقدار بازگشتی تابع را مشخص میکند.
راهنماهای نوع اختیاری هستند و پایتون آنها را اعمال نمیکند، اما برای بررسیگر نوع ایستا مفید هستند. آنها همچنین میتوانند به IDEها در تکمیل کد و بازآرایی کد کمک کنند.
راهنماهای نوع متغیرهای سراسری، ویژگیهای کلاس و توابع، اما نه متغیرهای محلی، با استفاده از
typing.get_type_hints()قابل دسترسی هستند.- سطرهای جدید همگانی¶
روشی برای تفسیر جریانهای متنی که در آن همهی موارد زیر بهعنوان پایان یک خط شناخته میشوند: قرارداد پایان خط یونیکس
'\n'، قرارداد ویندوز'\r\n'و قرارداد قدیمی مکینتاش'\r'. همچنین PEP 278 و PEP 3116 و نیزbytes.splitlines()را برای کاربردی دیگر ببینید.- حاشیهنویسی متغیر¶
یک حاشیهگذاری برای یک متغیر یا یک ویژگی کلاس.
هنگام حاشیهنویسی یک متغیر یا یک ویژگی کلاس، انتساب اختیاری است:
class C: field: 'annotation'
حاشیهنویسیهای متغیر معمولاً برای راهنمای نوع استفاده میشوند؛ برای مثال، انتظار میرود این متغیر مقادیر
intرا بپذیرد:count: int = 0
سینتکس حاشیهنویسی متغیر در بخش دستورهای انتساب حاشیهنویسیشده توضیح داده شده است.
همچنین حاشیهگذاری تابع، PEP 484 و PEP 526 را که این قابلیت را توصیف میکنند، ببینید. برای بهترین روشهای کار با حاشیهنویسیها نیز بهترین شیوههای حاشیهنویسی را ببینید.
- محیط مجازی¶
یک محیط رانتایم ایزولهشدهی مشارکتی که به کاربران و برنامههای پایتون اجازه میدهد بستههای توزیعی پایتون را بدون تداخل با رفتار سایر برنامههای پایتونی در حال اجرا روی همان سیستم، نصب و ارتقا دهند.
همچنین
venvرا ببینید.- ماشین مجازی¶
یک رایانه که بهطور کامل در نرمافزار تعریف شده است. ماشین مجازی پایتون بایتکد تولیدشده توسط کامپایلر بایتکد را اجرا میکند.
- عملگر والروس¶
روشی شوخطبعانه برای اشاره به عملگر assignment expression یعنی
:=، زیرا اگر سرتان را کمی کج کنید، ظاهر آن تا حدی شبیه یک والروس است.- ذن پایتون¶
فهرستی از اصول و فلسفههای طراحی پایتون که برای درک و استفاده از این زبان مفید هستند. این فهرست با واردکردن «
import this» در اعلان تعاملی قابل مشاهده است.