بیاید با یک مثال ببینیم. فرض کنید در یک فروشگاه آنلاین، میخوایم قیمت نهایی دو محصول رو با احتساب ۹٪ مالیات حساب کنیم.
روش اشتباه و تکراری (روش WET
- Write Everything Twice) رو توی عکس میبینید.
میبینید که منطق محاسبه مالیات (ضربدر ۰.۰۹) تکرار شده. حالا اگه مالیات بشه ۱۰٪، باید بگردیم و همه اینا رو دستی عوض کنیم!@pythopiachannel
روش اشتباه و تکراری (روش WET
۱۹:۱۸
Pythopia
بیاید با یک مثال ببینیم. فرض کنید در یک فروشگاه آنلاین، میخوایم قیمت نهایی دو محصول رو با احتساب ۹٪ مالیات حساب کنیم. روش اشتباه و تکراری (روش WET
- Write Everything Twice) رو توی عکس میبینید.
میبینید که منطق محاسبه مالیات (ضربدر ۰.۰۹) تکرار شده. حالا اگه مالیات بشه ۱۰٪، باید بگردیم و همه اینا رو دستی عوض کنیم! @pythopiachannel
روش درست و تمیز (روش DRY
)
اینجا منطق تکراری رو توی یک تابع میذاریم.(طبق عکس)
عالی شد! حالا اگه نرخ مالیات تغییر کنه، فقط و فقط یک خط داخل تابع calculate_final_price رو تغییر میدیم و همهچیز درست کار میکنه.مزایای DRY بودن:
نگهداری آسانتر: تغییرات فقط در یک نقطه اعمال میشه.
کاهش خطا: ریسک فراموش کردن آپدیت کد تکراری از بین میره.
کد خواناتر و کوتاهتر: کد شما تمیزتر و قابل فهمتر میشه.
پس همیشه یادتون باشه: یک برنامهنویس خوب، تنبله! تنبل از این جهت که کار تکراری انجام نمیده و برای هر چیزی یک راه حل هوشمندانه و مرکزی پیدا میکنه.
@pythopiachannel
اینجا منطق تکراری رو توی یک تابع میذاریم.(طبق عکس)
نگهداری آسانتر: تغییرات فقط در یک نقطه اعمال میشه.
کاهش خطا: ریسک فراموش کردن آپدیت کد تکراری از بین میره.
کد خواناتر و کوتاهتر: کد شما تمیزتر و قابل فهمتر میشه.
پس همیشه یادتون باشه: یک برنامهنویس خوب، تنبله! تنبل از این جهت که کار تکراری انجام نمیده و برای هر چیزی یک راه حل هوشمندانه و مرکزی پیدا میکنه.
@pythopiachannel
۱۹:۱۹
دکوراتور | Decorator
تصور کنید یک کادو خریدید و میخواید اون رو خوشگلتر کنید. چیکار میکنید؟ کادوپیچش میکنید!
دکوراتورها توی پایتون دقیقاً همین کار رو با توابع ما میکنن.
دکوراتور یک تابع خاصه که یک تابع دیگه رو به عنوان ورودی میگیره و بدون اینکه کد اصلی اون تابع رو تغییر بده، یک قابلیت جدید بهش اضافه میکنه و در نهایت، همون تابع رو با قابلیت جدید برمیگردونه.
به چه دردی میخوره؟
یک مثال معروف اندازهگیری زمان اجرای توابع است.
فرض کنید چندتا تابع مختلف دارید و میخواید زمان اجرای هر کدوم رو اندازه بگیرید. اولین راهی که به ذهن میاد اینه که توی تکتک توابع، قبل و بعد از اجرای کد اصلی، زمان رو ثبت و اختلافش رو حساب کنیم. این کار شدنیه، ولی خیلی تکراری و خستهکننده است و اصل DRY (Don't Repeat Yourself) رو نقض میکنه.
اینجاست که دکوراتورها مثل یک قهرمان وارد میشن! 🦸
@pythopiachannel
تصور کنید یک کادو خریدید و میخواید اون رو خوشگلتر کنید. چیکار میکنید؟ کادوپیچش میکنید!
دکوراتور یک تابع خاصه که یک تابع دیگه رو به عنوان ورودی میگیره و بدون اینکه کد اصلی اون تابع رو تغییر بده، یک قابلیت جدید بهش اضافه میکنه و در نهایت، همون تابع رو با قابلیت جدید برمیگردونه.
به چه دردی میخوره؟
یک مثال معروف اندازهگیری زمان اجرای توابع است.
فرض کنید چندتا تابع مختلف دارید و میخواید زمان اجرای هر کدوم رو اندازه بگیرید. اولین راهی که به ذهن میاد اینه که توی تکتک توابع، قبل و بعد از اجرای کد اصلی، زمان رو ثبت و اختلافش رو حساب کنیم. این کار شدنیه، ولی خیلی تکراری و خستهکننده است و اصل DRY (Don't Repeat Yourself) رو نقض میکنه.
اینجاست که دکوراتورها مثل یک قهرمان وارد میشن! 🦸
۱۷:۰۳
Pythopia
دکوراتور | Decorator تصور کنید یک کادو خریدید و میخواید اون رو خوشگلتر کنید. چیکار میکنید؟ کادوپیچش میکنید!
دکوراتورها توی پایتون دقیقاً همین کار رو با توابع ما میکنن. دکوراتور یک تابع خاصه که یک تابع دیگه رو به عنوان ورودی میگیره و بدون اینکه کد اصلی اون تابع رو تغییر بده، یک قابلیت جدید بهش اضافه میکنه و در نهایت، همون تابع رو با قابلیت جدید برمیگردونه. به چه دردی میخوره؟ یک مثال معروف اندازهگیری زمان اجرای توابع است. فرض کنید چندتا تابع مختلف دارید و میخواید زمان اجرای هر کدوم رو اندازه بگیرید. اولین راهی که به ذهن میاد اینه که توی تکتک توابع، قبل و بعد از اجرای کد اصلی، زمان رو ثبت و اختلافش رو حساب کنیم. این کار شدنیه، ولی خیلی تکراری و خستهکننده است و اصل DRY (Don't Repeat Yourself) رو نقض میکنه. اینجاست که دکوراتورها مثل یک قهرمان وارد میشن! 🦸
@pythopiachannel
بریم سراغ یک مثال ساده: لاگ گرفتن از زمان اجرا
در این عکس یک دکوراتور نوشتیم که زمان اجرای هر تابعی رو که بهش بدیم، حساب و چاپ میکنه.
خروجی:کار انجام شد!
'slow_function' در 2.00 ثانیه اجرا شد.اگه سوالی راجع به دکوریتورها دارید میتونید توی کامنتها بپرسید. ما همه رو میخونیم و جواب میدیم
@pythopiachannel
در این عکس یک دکوراتور نوشتیم که زمان اجرای هر تابعی رو که بهش بدیم، حساب و چاپ میکنه.
خروجی:کار انجام شد!
@pythopiachannel
۱۷:۰۴
اگه تو هم نمیتونی منظورت رو به هوش مصنوعی بفهمونی و مسائل پیچیده رو باهاش حل کنی، نگران نباش، این طبیعیه و ما اینجاییم تا بهت راه رو نشون بدیم.
مهندسی پرامپت، کلیدیه که بهت کمک میکنه از AI خروجی های خیره کننده بگیری.
توی این وبینار فشرده، فقط توی دو روز جدیدترین تکنیک های پیشرفته برای بهتر کردن دقت AI، امنیت پرامپت و پروژههای عملی با Hugging Face رو یاد میگیری و تا پنج برابر پاسخ بهتری از مدل های زبانی بزرگ میگیری.
هزینه ثبتنامدانشجویان و دانش آموزان: ۲۰۰ هزار توماندانشجویان الزهرا: ۱۴۰ هزار تومانعموم: ۲۷۰ هزار تومان
۱۱:۴۵
فرقی نداره طراح باشی، معلم، تولیدکننده محتوا، فریلنسر یا حتی صاحب کسبوکار
درسته که هوش مصنوعی کارت رو سریعتر، خلاقانهتر و حرفهایتر میکنه، ولی به شرطی که بلد باشی چطوری باهاش صحبت کنی.
۹:۲۱
۹:۲۱
روز جهانی برنامه نویس مبارک🥳به همین مناسبت میتونید تا ساعت ۲۳:۵۹ روز ۲۳ شهریور از تخفیف پنجاه درصدی روی دوره های خصوصی پایتون و طراحی سایت بهره مند بشید.
*کارگاه پرامپت نویسی (آموزش هوش مصنوعی) هم برای همه اعضای این کانال با تخفیف ویژه 60 درصدی، فقط ۸۰ هزار تومن میباشد.*
ثبتنام و اطلاعات بیشتر: @pythopia
@pythopiachannel
ثبتنام و اطلاعات بیشتر: @pythopia
@pythopiachannel
۱۷:۲۳
Git یه سیستم کنترل نسخه است. یعنی هر تغییری روی کدهات انجام بدی، ثبت میشه و هر وقت بخوای میتونی برگردی. دیگه نگران خراب شدن پروژه یا گم شدن فایلها نیستی.
مثال عملی:
برگشت به نسخه قبل:
git checkout HEAD~1
همکاری تیمی امن: هر نفر روی بخشی کار میکنه، Git همه تغییرات رو هماهنگ میکنه:
git add .git commit -m "Add login feature"git push origin main
چرا مهمه؟
@pythopiachannel
۲۱:۳۳
آخر این GET و POST توی وب دقیقا چی ان؟
تصور کن رفتی داروخانه:
میگی: «قرص سردرد دارین؟»
داروساز فقط جواب میده بله/خیر. این میشه GET. فقط اطلاعات میگیری، چیزی نمیدی.
حالا میگی: «این نسخه رو دارم، لطفاً داروهاشو برام بیارین.»
این میشه POST. داری اطلاعات جدید میدی (نسخهت)، داروساز بر اساس اون برات کاری انجام میده.
توی وب هم همینه:وقتی آدرس سایت رو توی مرورگر میزنی داری GET میکنی. فقط میخوای اطلاعات بگیری (مثل لیست مقالات).
وقتی فرم پر میکنی (مثلاً ثبتنام یا لاگین) داری POST میکنی. داری یه چیزی میفرستی سمت سرور تا ثبت بشه یا بررسی بشه.
حالا چرا مهمه؟GET سادهست و آدرسش توی URL دیده میشه (خطر لو رفتن اطلاعات حساس).
POST امنتره چون دیتا توی body درخواست میره، نه توی URL. برای همین همیشه برای فرمهای لاگین و ثبتنام از POST استفاده میکنیم.
تصور کن رفتی داروخانه:
میگی: «قرص سردرد دارین؟»
حالا میگی: «این نسخه رو دارم، لطفاً داروهاشو برام بیارین.»
وقتی فرم پر میکنی (مثلاً ثبتنام یا لاگین) داری POST میکنی. داری یه چیزی میفرستی سمت سرور تا ثبت بشه یا بررسی بشه.
POST امنتره چون دیتا توی body درخواست میره، نه توی URL. برای همین همیشه برای فرمهای لاگین و ثبتنام از POST استفاده میکنیم.
۱۸:۴۲
Pythopia
آخر این GET و POST توی وب دقیقا چی ان؟ تصور کن رفتی داروخانه: میگی: «قرص سردرد دارین؟»
داروساز فقط جواب میده بله/خیر. این میشه GET. فقط اطلاعات میگیری، چیزی نمیدی. حالا میگی: «این نسخه رو دارم، لطفاً داروهاشو برام بیارین.»
این میشه POST. داری اطلاعات جدید میدی (نسخهت)، داروساز بر اساس اون برات کاری انجام میده.
توی وب هم همینه: وقتی آدرس سایت رو توی مرورگر میزنی داری GET میکنی. فقط میخوای اطلاعات بگیری (مثل لیست مقالات). وقتی فرم پر میکنی (مثلاً ثبتنام یا لاگین) داری POST میکنی. داری یه چیزی میفرستی سمت سرور تا ثبت بشه یا بررسی بشه.
حالا چرا مهمه؟ GET سادهست و آدرسش توی URL دیده میشه (خطر لو رفتن اطلاعات حساس). POST امنتره چون دیتا توی body درخواست میره، نه توی URL. برای همین همیشه برای فرمهای لاگین و ثبتنام از POST استفاده میکنیم.
اینجا:
وقتی کاربر برای اولین بار وارد /login/ میشه، یه GET اتفاق افتاده (فقط صفحه رو میبینه).
وقتی فرم رو پر میکنه و میزنه روی دکمه ورود، یه POST میره سمت سرور.
۱۸:۴۳
┄┄┅┅┅
⃟
┅┅┅┄┄انجمن علمی دانشجویی مهندسی کامپیوتر معاونت فرهنگی اجتماعی دانشگاه الزهرا(س) با همکاری پایتوپیا برگزار میکند:
«دوره جامع و پروژهمحور تحلیل داده با پایتون»با تحلیل داده، به دنیای ناشناخته قدم بذار!
مدرس دوره:• سارا پورخلیل دانش آموخته علوم کامپیوتر از دانشگاه علم و صنعت
معرفی دوره:قراره توی این دوره از صفر با دنیای داده آشنا بشیم؛ از کار با فایلها و پاکسازی تا تحلیل، مصورسازی و حتی ساخت یه مدل رگرسیون خطی ساده. همهی این کارها رو با NumPy، Pandas و Matplotlib انجام میدیم.
تاریخ شروع دوره:۲۵ مهر
مدت زمان دوره:۱۲ جلسه – آنلاین در بستر اسکایروم
دسترسی به فیلمها و جزوات دوره
هزینه ثبتنام:دانشجویان دانشگاه الزهرا(س) و علموصنعت: ۱,۱۰۰,۰۰۰ تومانسایر دانشجویان و دانشآموزان: ۱,۶۰۰,۰۰۰ تومانعموم افراد: ۱,۸۰۰,۰۰۰ تومان
همراه با ارائه گواهی دوزبانه معتبر انجمن دانشگاه
جهت ثبتنام و کسب اطلاعات بیشتر به @pythopia در تلگرام یا بله مراجعه کنید.
https://t.me/ACSS0
❅ معاونت فرهنگی و اجتماعی دانشگاه الزهرا (س) ❅https://eitaa.com/farhangialzahraplans
«دوره جامع و پروژهمحور تحلیل داده با پایتون»با تحلیل داده، به دنیای ناشناخته قدم بذار!
دسترسی به فیلمها و جزوات دوره
جهت ثبتنام و کسب اطلاعات بیشتر به @pythopia در تلگرام یا بله مراجعه کنید.
❅ معاونت فرهنگی و اجتماعی دانشگاه الزهرا (س) ❅https://eitaa.com/farhangialzahraplans
۱۲:۲۸
جادوگر پر سرعت پایتون - AsyncIO
پایتون زبون قدرتمندیه ولی به خاطر قفل سراسری مفسر (GIL) تو سرعتهای خیلی بالا محدود میشه.اینجا GIL مثل یه بلیت VIP عمل میکنه: فقط یه نخ (thread) میتونه در هر لحظه اجرا بشه، حتی اگه CPU ی شما 16 هستهای باشه.
حالا برای سریعتر شدن باید بدونیم کارمون CPU-bound هست یا I/O-bound.
کار های CPU-bound مثل پردازش تصویر یا تحلیل دادههای سنگین نیاز به حساب و کتاب مداوم داره. اینجا باید از Multiprocessing استفاده کنیم چون هر پروسه مفسر خودش رو داره و روی هستههای مختلف بهصورت موازی اجرا میشه، پس محدودیت GIL رو دور میزنیم.
عملیات I/O-bound مثل گرفتن داده از چند API یا کار با دیتابیس، بیشتر وقتش صرف انتظار میشه. اینجا AsyncIO بهترین انتخابه چون به جای منتظر موندن، پایتون سراغ کار بعدی میره و از زمان CPU نهایت استفاده میکنه.
نتیجه: برای کارهای محاسباتی از Multiprocessing و برای کارهای پر از انتظار مثل درخواستهای شبکهای از AsyncIO استفاده میکنیم.
پایتون زبون قدرتمندیه ولی به خاطر قفل سراسری مفسر (GIL) تو سرعتهای خیلی بالا محدود میشه.اینجا GIL مثل یه بلیت VIP عمل میکنه: فقط یه نخ (thread) میتونه در هر لحظه اجرا بشه، حتی اگه CPU ی شما 16 هستهای باشه.
حالا برای سریعتر شدن باید بدونیم کارمون CPU-bound هست یا I/O-bound.
کار های CPU-bound مثل پردازش تصویر یا تحلیل دادههای سنگین نیاز به حساب و کتاب مداوم داره. اینجا باید از Multiprocessing استفاده کنیم چون هر پروسه مفسر خودش رو داره و روی هستههای مختلف بهصورت موازی اجرا میشه، پس محدودیت GIL رو دور میزنیم.
عملیات I/O-bound مثل گرفتن داده از چند API یا کار با دیتابیس، بیشتر وقتش صرف انتظار میشه. اینجا AsyncIO بهترین انتخابه چون به جای منتظر موندن، پایتون سراغ کار بعدی میره و از زمان CPU نهایت استفاده میکنه.
نتیجه: برای کارهای محاسباتی از Multiprocessing و برای کارهای پر از انتظار مثل درخواستهای شبکهای از AsyncIO استفاده میکنیم.
۱۶:۴۳
در اپلیکیشن های جنگو، DRF چیه و چرا همه ازش حرف میزنن؟
اگه با Django کار کردی، احتمالاً میدونی که خودش برای ساخت وبسایتها عالیه.مدل، ویو، تمپلیت، همهچی سر جاشه.
اما وقتی بخوای یه اپلیکیشن موبایل یا فرانتاند React/Vue به دیتای بکاندت وصل بشه چی؟
اینجاست که قهرمان وارد میشه :)
🦸
Django REST Framework (یا همون DRF)
یه افزونهی قوی روی جنگوئه که بهت کمک میکنه:
دادههات رو بهصورت API برای بقیه منتشر کنی.
به زبان ساده، با DRF میتونی از پروژهی Djangoت یه “سرویس داده” یا “backend برای بقیه اپها” بسازی.یعنی بهجای اینکه HTML برگردونی، JSON برمیگردونی
《ساده، تمیز و استاندارد》
توی پست بعدی با یه مثال توضیحات کامل تری رو میبینیم
اگه با Django کار کردی، احتمالاً میدونی که خودش برای ساخت وبسایتها عالیه.مدل، ویو، تمپلیت، همهچی سر جاشه.
اما وقتی بخوای یه اپلیکیشن موبایل یا فرانتاند React/Vue به دیتای بکاندت وصل بشه چی؟
اینجاست که قهرمان وارد میشه :)
🦸
یه افزونهی قوی روی جنگوئه که بهت کمک میکنه:
دادههات رو بهصورت API برای بقیه منتشر کنی.
به زبان ساده، با DRF میتونی از پروژهی Djangoت یه “سرویس داده” یا “backend برای بقیه اپها” بسازی.یعنی بهجای اینکه HTML برگردونی، JSON برمیگردونی
《ساده، تمیز و استاندارد》
توی پست بعدی با یه مثال توضیحات کامل تری رو میبینیم
۱۸:۲۶
🧩 یه مثال واقعیفرض کن یه استارتاپ داری برای سفارش غذا 
تیم فرانتاند داره با React وب میسازه
تیم موبایل داره با Flutter کار میکنه
هر دو تیم باید بتونن:
لیست رستورانها رو بگیرن
سفارش جدید ثبت کنن
وضعیت سفارش رو چک کنن
تو نمیخوای براشون HTML بفرستی!میخوای فقط داده بفرستی. مثلاً:
{ "restaurant": "BurgerLand", "status": "ready", "price": 180000}اینجا DRF مثل یه مترجم بین دیتابیس Django و دنیای JSON و APIها عمل میکنه.API میسازه که همهجا بشه ازش استفاده کرد: موبایل، وب، حتی سیستمهای دیگه.
چه کاربردهایی تو دنیای واقعی داره؟
اپلیکیشنهای موبایل:تقریباً هر اپ موبایل امروزی (مثلاً دیجیکالا، اسنپ، تپسی) برای دریافت داده از سرور از API استفاده میکنه که توسط DRF تولید میشه.
پنلهای ادمین React/Vue:وقتی بکاند Django و فرانتاند جدا هستن، DRF پل ارتباطی بینشونه.
سرویسهای داخلی (microservices):در پروژههای بزرگ، بخشهای مختلف از طریق API با هم حرف میزنن، DRF استانداردی برای این ارتباطه.
اتصال با سرویسهای خارجی:مثلاً پرداخت آنلاین، نقشه، ارسال نوتیف، یا احراز هویت با گوگل.
چرا DRF محبوبه؟
ساده و پایتونیه — همون فلسفهی Django
امنیت بالا (Auth، Permissions، Throttling)
ساخت خودکار Endpointها و Documentها
داشتن Serializerها برای تبدیل دادهها بین مدل و JSON🪄دارای Browsable API (یه صفحهی آماده برای تست API با مرورگر)
اگر Django بلدی و میخوای وارد ساخت backend برای اپها و فرانتاندهای مدرن بشی،DRF اولین چیزیه که باید یاد بگیری.
تیم فرانتاند داره با React وب میسازه
تیم موبایل داره با Flutter کار میکنه
هر دو تیم باید بتونن:
لیست رستورانها رو بگیرن
سفارش جدید ثبت کنن
وضعیت سفارش رو چک کنن
تو نمیخوای براشون HTML بفرستی!میخوای فقط داده بفرستی. مثلاً:
{ "restaurant": "BurgerLand", "status": "ready", "price": 180000}اینجا DRF مثل یه مترجم بین دیتابیس Django و دنیای JSON و APIها عمل میکنه.API میسازه که همهجا بشه ازش استفاده کرد: موبایل، وب، حتی سیستمهای دیگه.
۱۸:۲۶
این هفته به جای کافه رفتن، پایتون یاد بگیر!
“کارگاه آموزشی پایتون”
سرفصل ها:ساختارهای دادهدستورهای شرطیحلقهتابعساخت ماژول اختصاصیکار با فایل
همراه با ارائه مدرک معتبر از دانشگاه الزهرا
پشتیبانی فوری در تلگرام( گروه اختصاصی + چت خصوصی)
دسترسی دائمی به جزوهها و ویدئوی جلسات
زمان برگزاری:۱۳ و ۱۴ آذر ۱۴۰۴ساعت ۱۰ الی۱۲
شهریه:عموم دانشجویان: ۳۰۰ هزارتوماندانشجویان دانشگاه های الزهرا و زنجان:۲۷۸ هزارتومان
شرکت برای عموم آزاد است.
ظرفیت: ۲۵ نفر
برای رزرو به آیدی زیر پیام دهید:@pythopia
❅معاونت فرهنگی و اجتماعی دانشگاه الزهرا (س)❅https://eitaa.com/farhangialzahraplans
“کارگاه آموزشی پایتون”
پشتیبانی فوری در تلگرام( گروه اختصاصی + چت خصوصی)
شرکت برای عموم آزاد است.
برای رزرو به آیدی زیر پیام دهید:@pythopia
❅معاونت فرهنگی و اجتماعی دانشگاه الزهرا (س)❅https://eitaa.com/farhangialzahraplans
۵:۲۰
چرا باید تست نوشتن بلد باشیم؟
تو برنامهنویسی، اینکه صرفا “کدت کار کنه” فقط نصف ماجراست. نصف مهمترش اینه که همیشه و در هر شرایطی درست کار کنه؛ فارغ از اینکه چه متغیر هایی عوض بشن. دقیقاً همینجاست که تستنویسی نقش اصلی رو بازی میکنه.
چندتا دلیل خیلی ساده ولی مهم:
زودتر میفهمی کجای کارت میلنگه.
وقتی یه چیزی رو تغییر میدی، خیالت راحته که بقیه خراب نمیشه .
تستها مثل دفترچهی راهنمای زندهان؛ میگن هر بخش از کد دقیقاً چه انتظاری رو باید برآورده کنه.
تو کار تیمی هم عملاً جون همه رو نجات میدن؛ چون هر فرد مطمئنه با یه تغییر کوچیک پروژه رو خراب نمیکنه.
خلاصه اینکه: تستنویسی هم برای خودت خوبه، هم برای اعصابت، هم برای بقیه آدمای بیگناهی که قراره رو کد تو کار کنن
توی پست بعدی با unittest در پایتون آشنا میشیم.
@pythopiachannel
تو برنامهنویسی، اینکه صرفا “کدت کار کنه” فقط نصف ماجراست. نصف مهمترش اینه که همیشه و در هر شرایطی درست کار کنه؛ فارغ از اینکه چه متغیر هایی عوض بشن. دقیقاً همینجاست که تستنویسی نقش اصلی رو بازی میکنه.
چندتا دلیل خیلی ساده ولی مهم:
تو کار تیمی هم عملاً جون همه رو نجات میدن؛ چون هر فرد مطمئنه با یه تغییر کوچیک پروژه رو خراب نمیکنه.
خلاصه اینکه: تستنویسی هم برای خودت خوبه، هم برای اعصابت، هم برای بقیه آدمای بیگناهی که قراره رو کد تو کار کنن
توی پست بعدی با unittest در پایتون آشنا میشیم.
@pythopiachannel
۱۰:۵۷
تستنویسی مقدماتی با unittest
پایتون خودش یه ابزار تستنویسی به اسم unittest داره، و خوبیش اینه که برای شروع لازم نیست چیز خاصی بلد باشی.
یه مثال ساده، روی لینک زیر کلیک کنید:
• یه تابع جمع اعداد نوشتیم که تایپ رو چک میکنه• یه کلاس تست ساختیم•در ابتدا چند تا تست که پاس میشن و بعد چند تا تست با ارور های متفاوت گذاشتیم که مطمئن بشیم خروجی تابع درسته.•با assertEqual چک کردیم که نتیجه دقیقاً همونیه که میخوایم
همین! خیلی از پروژههای بزرگ دنیا هم از همین ساختار ساده شروع شدن.
چند تا نکتهی مهم که از همون اول باید جدی بگیری:
︎هر تست فقط یه چیز رو چک کنه.
︎اسم تستهاتو واضح انتخاب کن؛ که بعداً خودت هم بفهمی چی نوشتی.
︎تستهات وابسته به محیط و شانس و ساعت سیستم نباشن.
اگر سوالی داشتی تو کامنتا بپرس.
منتظر کوئیز ویژه این بخش باشید.
@pythopiachannel
پایتون خودش یه ابزار تستنویسی به اسم unittest داره، و خوبیش اینه که برای شروع لازم نیست چیز خاصی بلد باشی.
یه مثال ساده، روی لینک زیر کلیک کنید:
import unittest
def add(a, b):
"""
این تابع دو مقدار رو با هم جمع میکنه، اما:
- اگر هر کدوم از ورودیها str باشه → خطا بده (TypeError)
- اگر هر کدوم از ورودیها None باشه → خطا بده
- فقط اعداد int یا float رو قبول کنه
"""
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("ورودیها باید عدد باشن!")
if a is None or b is None:
raise ValueError("ورودی نمیتونه None باشه!")
return a + b
# ------------ تستها --------------
class TestAddFunction(unittest.TestCase):
# تستهای موفق (Happy Path)
def test_add_positive_numbers(self):
self.assertEqual(add(2, 3),
5)
def test_add_float_numbers(self):
self.assertEqual(add(2.5, 3.7), 6.2)
def test_add_zero(self):
self.assertEqual(add(10, 0), 10)
# تستهای خطادار (باید ارور بدن)
def test_add_string_raises_type_error(self):
with self.assertRaises(TypeError):
add("2", 3)
def test_add_none_raises_value_error(self):
with self.assertRaises(ValueError):
add(5, None)
if __name__ == '__main__':
unittest.main(verbosity=2)کاری که اینجا کردیم:• یه تابع جمع اعداد نوشتیم که تایپ رو چک میکنه• یه کلاس تست ساختیم•در ابتدا چند تا تست که پاس میشن و بعد چند تا تست با ارور های متفاوت گذاشتیم که مطمئن بشیم خروجی تابع درسته.•با assertEqual چک کردیم که نتیجه دقیقاً همونیه که میخوایم
همین! خیلی از پروژههای بزرگ دنیا هم از همین ساختار ساده شروع شدن.
اگر سوالی داشتی تو کامنتا بپرس.
@pythopiachannel
۱۰:۵۸
جعبه ابزار «بینهایت» پایتون کدوم کتابخونهس؟
اگه از حلقههای for تو در تو خسته شدید و کداتون کُند شده، وقتشه با نجات دهندهتون آشنا بشید: ماژول itertools
این ماژول شبیه یه آچار فرانسه برای کار با لیستها، تکرارها و ترکیبهای دادهایه. دیگه نیازی نیست ساعتها کد بزنی تا چند تا حالت مختلف رو بچینی.
ماژول itertools برای حل مشکلات زیر طراحی شده است:
سرعت و عملکرد: توابع داخلی این ماژول با کد C نوشته شدهاند، به همین دلیل خیلی سریعتر و بهینهتر از حلقههای for تو در تو هستند که خودتون مینویسید.
مصرف بهینه حافظه (Lazy): این توابع به جای اینکه تمام نتایج ممکن را یکباره در حافظه RAM ذخیره کنند، نتایج رو بهصورت تک به تک و در لحظه نیاز تولید میکنند. این یعنی حتی با دادههای "بینهایت" یا بسیار بزرگ هم میتوانید بدون مشکل حافظه کار کنید.
🧰کد تمیز و هوشمند: یک خط کد با itertools جایگزین دهها خط کد پیچیده میشود و خوانایی پروژه را به شدت بالا میبره.در پست بعدی با پرکاربرد ترین توابع این کتابخونه آشنا میشیم.
اگه از حلقههای for تو در تو خسته شدید و کداتون کُند شده، وقتشه با نجات دهندهتون آشنا بشید: ماژول itertools
ماژول itertools برای حل مشکلات زیر طراحی شده است:
🧰کد تمیز و هوشمند: یک خط کد با itertools جایگزین دهها خط کد پیچیده میشود و خوانایی پروژه را به شدت بالا میبره.در پست بعدی با پرکاربرد ترین توابع این کتابخونه آشنا میشیم.
۱۷:۴۹
اولین ابزار از جعبهابزار بینهایت: cycle
بعد از معرفی itertools، وقتشه یکی از پرکاربرد ترین ابزارهاشو ببینیم:تابع cycle، هر چیزی بدی بهش، بینهایت تکرارش میکنه.و این تکرار میتونه برنامهت رو هوشمند تر کنه
مثال :
فرض کن داری یک بازی ساده میسازی و میخوای دشمنها یکیدرمیون از سه مسیر مختلف وارد صفحه بشن:
from itertools import cycle
paths = cycle(["left", "center", "right"])
for _ in range(9): print("Enemy spawned from:", next(paths))
خروجی:leftcenterrightleftcenterrightleftcenterright
با cycle منطق چرخشی رو بدون نیاز به شرطهای تکراری یا مدیریت دستی اندیسها پیاده میکنیم.نه تنها یه الگوی بینقص و قابل اتکا بهمون میده، بلکه یه چرخهی پایدار میسازه که توی هر بار فراخوانی، عنصر بعدی رو دقیق و منظم تحویل میده و کدت رو تمیز، خوانا و حرفهای نگه میداره.
در پست بعدی، میریم سراغ یکی دیگه از ابزارهای فوقالعاده itertools.
️
بعد از معرفی itertools، وقتشه یکی از پرکاربرد ترین ابزارهاشو ببینیم:تابع cycle، هر چیزی بدی بهش، بینهایت تکرارش میکنه.و این تکرار میتونه برنامهت رو هوشمند تر کنه
فرض کن داری یک بازی ساده میسازی و میخوای دشمنها یکیدرمیون از سه مسیر مختلف وارد صفحه بشن:
from itertools import cycle
paths = cycle(["left", "center", "right"])
for _ in range(9): print("Enemy spawned from:", next(paths))
خروجی:leftcenterrightleftcenterrightleftcenterright
با cycle منطق چرخشی رو بدون نیاز به شرطهای تکراری یا مدیریت دستی اندیسها پیاده میکنیم.نه تنها یه الگوی بینقص و قابل اتکا بهمون میده، بلکه یه چرخهی پایدار میسازه که توی هر بار فراخوانی، عنصر بعدی رو دقیق و منظم تحویل میده و کدت رو تمیز، خوانا و حرفهای نگه میداره.
در پست بعدی، میریم سراغ یکی دیگه از ابزارهای فوقالعاده itertools.
۱۱:۱۰