رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد

واژه‌نامه

هر واژه یک بار و دقیق تعریف شده است. این فهرست برای مرور سریع هنگام حل مسئله ساخته شده — نه برای خواندن از ابتدا تا انتها.

ا

استثنا

خطای نحوی قبل از اجراست؛ استثنا در زمان اجراست و قابل مدیریت. الگوها در استثناها و جریان انتشار.

ب

بازآرایی

هر قدم کوچک و بعدش تست سبز. بوی شروع در بوی کد.

بستار

جایگزینِ پایتونیکِ کلاس‌های تک‌متدهٔ جاوایی. نوشتنِ متغیرِ بیرونی از داخل نیازمند nonlocal است.

پ

پروتکل

نزدیک‌ترین چیز به اینترفیسِ جاوا ولی انعطاف‌پذیرتر: به‌جای سلسله‌مراتب، «شکل» را چک می‌کند. ببین کلاس انتزاعی و پروتکل.

پکیج

__init__.py مرز و رابطِ عمومیِ پکیج است: همان چیزهایی که کاربر باید ببیند. ببین واردات و فضاهای نام.

ت

ترتیب حل متد

با ClassName.__mro__ دیده می‌شود. هر کلاس یک‌بار در زنجیره است و super() در همین ترتیب قدم می‌زند. ببین وراثت چندگانه و MRO.

تزئین‌کننده

برای رفتارهای عرضی (لاگ، تلاش مجدد، کش) به کار می‌رود. همیشه با functools.wraps بنویس. ببین تزئین‌کننده‌ها و بستارها.

تست واحد

اول مرزها، بعد مسیر اصلی، بعد استثناها. اسم تست باید جمله باشد. ببین تست واحد.

تکرارگر

تکرارپذیر (مثل list) را می‌شود چند بار پیمود؛ تکرارگر را فقط یک‌بار. تکرارگرِ مصرف‌شده ساکت خالی برمی‌گرداند.

چ

چندریختی

کدی که با والد (یا پروتکل) حرف می‌زند، روی هر نوعِ تازه بدون تغییر کار می‌کند. جزئیات در چندریختی و ارسال پویا.

د

دیتاکلاس

وقتی کلاس بیشتر «داده» است تا «رفتار»، انتخابِ اول. از ماژول dataclasses می‌آید.

ر

راهبرد

وقتی راهبردها حالت ندارند، تابع کافی است و سلسله‌مراتب کلاس لازم نیست. مثال در تخفیف راهبردی.

ریسه

به‌خاطر GIL، ریسه‌های CPU-bound موازیِ واقعی نمی‌شوند. ببین ریسه‌ها و قفل‌ها.

ز

زمینه‌بان

فایل، قفل، اتصال و تراکنش همه زمینه‌بان‌اند. ببین زمینه‌بان‌ها.

س

سوکت

سوکت رشته نمی‌فهمد؛ encode/decode و مرزِ پیام (طول‌اول یا جداکننده) قراردادِ توست. ببین سوکت و TCP.

ش

شمارش

مقایسه همیشه با خودِ عضو (is Payment.CASH). ببین شمارش‌ها.

شیء

هر شیء دو چیز دارد: حالت (مقادیر ویژگی‌هایش) و رفتار (متدهایی که می‌فهمد). دو شیء از یک کلاس رفتار مشترک ولی حالت مستقل دارند.

ق

قفل

همیشه با with گرفته شود و تا حد ممکن کوچک باشد. راه‌حلِ ریشه‌ای‌تر معمولاً حذفِ حالتِ مشترک (صف و پیام) است.

ک

کلاس

کلاس خودش کاری انجام نمی‌دهد؛ شیءها انجام می‌دهند. کلاس را یک‌بار می‌نویسی و هر چند شیءِ مستقل که بخواهی از آن می‌سازی. برای شروع به کلاس در برابر شیء برگرد.

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

با abc.ABC و @abstractmethod ساخته می‌شود. برای قراردادِ بدونِ وراثتِ اجباری، پروتکل را ببین.

م

موک

فقط برای مرز (شبکه، ساعت، درگاه)؛ موکِ بیش‌ازحد تست را آینهٔ پیاده‌سازی می‌کند. ببین موک و دابل‌ها.

مولد

برای دنباله‌های بزرگ یا بی‌نهایت تنها راهِ عملی است. در برابر لیست (یک‌جا) و تکرارگر (یک‌بارمصرف) ببین تکرارگرها و مولدها.

ن

ناظر

در پایتون با لیستِ callback و متد subscribe پیاده می‌شود؛ همان ایدهٔ پشتِ سیستم‌های رویداد و GUI.

و

وراثت

وراثت استفادهٔ دوباره می‌دهد ولی سلسله‌مراتبِ عمیق شکننده است. اگر رابطه «دارد» است، ترکیب را ببین.

ویژگی محاسباتی

باید ارزان و بدون غافلگیری باشد؛ هزینهٔ سنگین یعنی متدِ نام‌دار. ببین ویژگی‌ها.

O

O بزرگ

«O(n) است» یعنی رشدش حداکثر خطی است، نه این‌که دقیقاً n قدم است. تعریف دقیق در تعریف O بزرگ.

p

pickle

فقط برای داده‌ای که خودت نوشته‌ای؛ برای بقیهٔ دنیا JSON یا CSV با اعتبارسنجی. ببین JSON و CSV و بار امن.

s

self

پایتون self را خودکار پاس می‌دهد: acc.deposit(50) یعنی deposit(acc, 50). اسمش قرارداد است نه کلمهٔ کلیدی، ولی هیچ‌کس عوضش نمی‌کند. جزئیات در self و سازنده.