Pythopia
وقتی یک متغیر رو به تابع پاس میدیم، آیا مقدارش تغییر میکنه؟ بستگی به نوع متغیر داره ۱. دادههای تغییرناپذیر (Immutable) این دادهها مثل اعداد (int) و متنها (str)، وقتی به تابع فرستاده بشن، فقط یک کپی از مقدارشون میره. پس متغیر اصلی تغییر نمیکنه. def …
با توجه به پست دیشب در رابطه با نحوه پاس دادن متغیر ها، خروجی کد زیر چیست؟
def update_string(text):
text = "new text"
my_string = "old text"
update_string(my_string)
print(my_string)
❤10
🔥13
🏆امروز آخرین کوئیز مبحث ارجاع متغیر رو داریم
خروجی کد زیر چیست؟
توی کوئیز پست بعد پاسخ بدید
خروجی کد زیر چیست؟
def replace_list(items):
items = [100, 200]
my_list = [1, 2, 3]
replace_list(my_list)
print(my_list)
توی کوئیز پست بعد پاسخ بدید
❤13
👍15
الگوهای طراحی یا Design Patterns چیست و چرا مهمه؟
تا حالا شده حس کنید یک مشکل رو دارید برای چندمین بار حل میکنید؟ مثلاً مدیریت تنظیمات برنامه یا ساختن آبجکتهای پیچیده؟
الگوهای طراحی، مثل دستور پخت غذاهای معروف اند! 🍝
اونا راهحلهای تستشده، بهینه و قابل استفاده مجدد برای مشکلات تکراری در مهندسی نرمافزار هستند. به جای اینکه هر بار چرخ رو از اول اختراع کنیم، از تجربه و خرد جمعی برنامهنویسان حرفهایِ سراسر جهان استفاده میکنیم.
✅ چرا باید یادشون بگیریم؟
زبان مشترک: به شما و تیمتون یک زبان مشترک برای بحث در مورد راهحلها میده.
کد تمیزتر: کد شما رو خواناتر، قابل نگهداریتر و انعطافپذیرتر میکنه.
حل سریعتر مشکلات: با شناخت الگوها، راهحلهای استاندارد همیشه در ذهن شماست.
الگوهای طراحی به سه دسته اصلی تقسیم میشن که در پستهای بعدی هر کدوم رو بررسی میکنیم:
الگوهای ایجادی (Creational)
الگوهای رفتاری (Behavioral)
الگوهای ساختاری (Structural)
منتظر پست بعدی باشید!
@pythopiachannel
تا حالا شده حس کنید یک مشکل رو دارید برای چندمین بار حل میکنید؟ مثلاً مدیریت تنظیمات برنامه یا ساختن آبجکتهای پیچیده؟
الگوهای طراحی، مثل دستور پخت غذاهای معروف اند! 🍝
اونا راهحلهای تستشده، بهینه و قابل استفاده مجدد برای مشکلات تکراری در مهندسی نرمافزار هستند. به جای اینکه هر بار چرخ رو از اول اختراع کنیم، از تجربه و خرد جمعی برنامهنویسان حرفهایِ سراسر جهان استفاده میکنیم.
✅ چرا باید یادشون بگیریم؟
زبان مشترک: به شما و تیمتون یک زبان مشترک برای بحث در مورد راهحلها میده.
کد تمیزتر: کد شما رو خواناتر، قابل نگهداریتر و انعطافپذیرتر میکنه.
حل سریعتر مشکلات: با شناخت الگوها، راهحلهای استاندارد همیشه در ذهن شماست.
الگوهای طراحی به سه دسته اصلی تقسیم میشن که در پستهای بعدی هر کدوم رو بررسی میکنیم:
الگوهای ایجادی (Creational)
الگوهای رفتاری (Behavioral)
الگوهای ساختاری (Structural)
منتظر پست بعدی باشید!
@pythopiachannel
1🔥13👏3❤1
الگو های طراحی ـ قسمت دوم
🏗️ الگوهای ایجادی (Creational Patterns)
در دومین بخش از سری الگوهای طراحی، به سراغ الگوهای ایجادی میرویم.
🎯 هدف این الگوها چیست؟ این الگوها به فرآیند ساخت آبجکتها (Object Creation) مربوط میشن. اونها به ما کمک میکنن تا آبجکتها رو به شکلی بسازیم که کد ما انعطافپذیر باشه و به روش ساخت یک آبجکت خاص وابسته نباشه.
به زبان ساده، مثل اینه که شما انواع مختلفی از کارخونهها برای تولید محصولات متفاوت داشته باشید.
چند مثال معروف:
Singleton (تکنمونه): تضمین میکنه که از یک کلاس، فقط و فقط یک نمونه در کل برنامه وجود داشته باشه. (مثال کد در پست قبلی)
Factory Method (متد کارخانه): به
یک کلاس اجازه میده تا مسئولیت ساخت آبجکت رو به زیرکلاسهای خودش واگذار کنه. مثل کارخونه ماشینسازی که مدلهای مختلفی از ماشین رو تولید میکنه.
Builder (سازنده): فرآیند ساخت یک آبجکت پیچیده رو از نمایش نهایی اون جدا میکنه. مثل وقتی که یک ساندویچ رو مرحله به مرحله و با مواد دلخواه خودتون میسازید.
در پست بعدی، الگوهای رفتاری رو بررسی خواهیم کرد.
@pythopiachannel
🏗️ الگوهای ایجادی (Creational Patterns)
در دومین بخش از سری الگوهای طراحی، به سراغ الگوهای ایجادی میرویم.
🎯 هدف این الگوها چیست؟ این الگوها به فرآیند ساخت آبجکتها (Object Creation) مربوط میشن. اونها به ما کمک میکنن تا آبجکتها رو به شکلی بسازیم که کد ما انعطافپذیر باشه و به روش ساخت یک آبجکت خاص وابسته نباشه.
به زبان ساده، مثل اینه که شما انواع مختلفی از کارخونهها برای تولید محصولات متفاوت داشته باشید.
چند مثال معروف:
Singleton (تکنمونه): تضمین میکنه که از یک کلاس، فقط و فقط یک نمونه در کل برنامه وجود داشته باشه. (مثال کد در پست قبلی)
Factory Method (متد کارخانه): به
یک کلاس اجازه میده تا مسئولیت ساخت آبجکت رو به زیرکلاسهای خودش واگذار کنه. مثل کارخونه ماشینسازی که مدلهای مختلفی از ماشین رو تولید میکنه.
Builder (سازنده): فرآیند ساخت یک آبجکت پیچیده رو از نمایش نهایی اون جدا میکنه. مثل وقتی که یک ساندویچ رو مرحله به مرحله و با مواد دلخواه خودتون میسازید.
در پست بعدی، الگوهای رفتاری رو بررسی خواهیم کرد.
@pythopiachannel
👏13
الگوهای طراحی-قسمت سوم
الگوهای رفتاری (Behavioral Patterns) 🗣️
در سومین بخش، به بررسی الگوهای رفتاری میپردازیم.
🎯 هدف این الگوها چیست؟ این الگوها روی الگوریتمها و نحوه ارتباط و همکاری بین آبجکتها تمرکز دارن. اونها مشخص میکنن که آبجکتها چطور با هم صحبت کنن و وظایف رو بین خودشون تقسیم کنن.
مثل طراحی روشهای مختلف برای کار گروهی و ارتباط بین اعضای یک تیم.
چند مثال معروف:
Observer (ناظر): وقتی یک آبجکت تغییر حالت میده، تمام وابستگانش (ناظران) به طور خودکار خبردار میشن. دقیقاً مثل مشترک شدن (Subscribe) در یک کانال یوتیوب.
Strategy (استراتژی): به شما اجازه میده چند الگوریتم مختلف رو در کلاسهای جداگانه تعریف کنید و در زمان اجرا، هر کدوم رو که خواستید انتخاب و استفاده کنید. مثل داشتن روشهای پرداخت مختلف (کارت به کارت، درگاه آنلاین، پیپال).
Command (فرمان): یک درخواست رو به یک آبجکت مستقل تبدیل میکنه. مثل سفارش غذا در رستوران که به عنوان یک "تیکت سفارش" از گارسون به آشپز منتقل میشه.
در پست آخر، به سراغ الگوهای ساختاری خواهیم رفت.
@pythopiachannel
الگوهای رفتاری (Behavioral Patterns) 🗣️
در سومین بخش، به بررسی الگوهای رفتاری میپردازیم.
🎯 هدف این الگوها چیست؟ این الگوها روی الگوریتمها و نحوه ارتباط و همکاری بین آبجکتها تمرکز دارن. اونها مشخص میکنن که آبجکتها چطور با هم صحبت کنن و وظایف رو بین خودشون تقسیم کنن.
مثل طراحی روشهای مختلف برای کار گروهی و ارتباط بین اعضای یک تیم.
چند مثال معروف:
Observer (ناظر): وقتی یک آبجکت تغییر حالت میده، تمام وابستگانش (ناظران) به طور خودکار خبردار میشن. دقیقاً مثل مشترک شدن (Subscribe) در یک کانال یوتیوب.
Strategy (استراتژی): به شما اجازه میده چند الگوریتم مختلف رو در کلاسهای جداگانه تعریف کنید و در زمان اجرا، هر کدوم رو که خواستید انتخاب و استفاده کنید. مثل داشتن روشهای پرداخت مختلف (کارت به کارت، درگاه آنلاین، پیپال).
Command (فرمان): یک درخواست رو به یک آبجکت مستقل تبدیل میکنه. مثل سفارش غذا در رستوران که به عنوان یک "تیکت سفارش" از گارسون به آشپز منتقل میشه.
در پست آخر، به سراغ الگوهای ساختاری خواهیم رفت.
@pythopiachannel
❤15
الگوهای ساختاری (Structural Patterns) 🏛️
در آخرین بخش از سری الگوهای طراحی، به الگوهای ساختاری میپردازیم.
🎯 هدف این الگوها چیست؟ این الگوها به ما نشون میدن که چطور کلاسها و آبجکتها رو با هم ترکیب کنید تا ساختارهای بزرگتر ولی انعطافپذیر بسازیم.
تمرکز اصلی اونها روی سادهسازی ساختار و روابط بین اجزاست.
مثل استفاده از قطعات لگو برای ساختن سازهها. 🧱
چند مثال معروف:
Decorator (تزئینگر): به شما اجازه میده تا بدون تغییر در کد یک کلاس، قابلیتهای جدیدی رو در زمان اجرا به آبجکتهای اون اضافه کنید. مثل اضافه کردن تاپینگهای مختلف به بستنی.
Adapter (آداپتور): به دو آبجکت با اینترفیسهای ناسازگار اجازه میده تا با هم کار کنن. دقیقاً مثل آداپتور برق که دوشاخه اروپایی شما رو به پریز آمریکایی وصل میکنه.
Facade (نما): یک رابط ساده و یکپارچه برای یک مجموعه بزرگ و پیچیده از کدها (مثل یک کتابخانه) فراهم میکنه. مثل دکمه "روشن/خاموش" در یک سیستم سینمای خانگی پیچیده.
@pythopiachannel
در آخرین بخش از سری الگوهای طراحی، به الگوهای ساختاری میپردازیم.
🎯 هدف این الگوها چیست؟ این الگوها به ما نشون میدن که چطور کلاسها و آبجکتها رو با هم ترکیب کنید تا ساختارهای بزرگتر ولی انعطافپذیر بسازیم.
تمرکز اصلی اونها روی سادهسازی ساختار و روابط بین اجزاست.
مثل استفاده از قطعات لگو برای ساختن سازهها. 🧱
چند مثال معروف:
Decorator (تزئینگر): به شما اجازه میده تا بدون تغییر در کد یک کلاس، قابلیتهای جدیدی رو در زمان اجرا به آبجکتهای اون اضافه کنید. مثل اضافه کردن تاپینگهای مختلف به بستنی.
Adapter (آداپتور): به دو آبجکت با اینترفیسهای ناسازگار اجازه میده تا با هم کار کنن. دقیقاً مثل آداپتور برق که دوشاخه اروپایی شما رو به پریز آمریکایی وصل میکنه.
Facade (نما): یک رابط ساده و یکپارچه برای یک مجموعه بزرگ و پیچیده از کدها (مثل یک کتابخانه) فراهم میکنه. مثل دکمه "روشن/خاموش" در یک سیستم سینمای خانگی پیچیده.
امیدواریم این سری پستها بهتون در درک بهتر الگوهای طراحی کمک کرده باشه. یادگیری این الگوها یک گام بزرگ در مسیر حرفهای شدنه!
@pythopiachannel
🔥8❤5🏆2
کدام یک از گزینههای زیر بهترین توصیف برای هدف اصلی الگوهای طراحی (Design Patterns) است؟
Anonymous Quiz
13%
باعث اجرای سریعتر کد میشوند.
56%
راه حلهای تست شده و توسعه پذیر برای مشکلات رایج برنامه نویسی ارائه میدهند.
9%
به طور خودکار خطاها را در کد پیدا میکنند
22%
تعداد خطوط کد را به شدت کاهش میدهند.
🔥11👍3
آشنایی با رفتگرِ پایتون 🧹
تاحالا فکر کردین وقتی کارمون با یه متغیر تموم میشه، چه بلایی سر حافظهای که گرفته میاد؟
اینجا سر و کلهی «رفتگر» پایتون یا همون Garbage Collector (GC) پیدا میشه!
حافظهی کامپیوتر رو یه اتاق بزرگ در نظر بگیرین. هر متغیر، یه جعبهست که یه گوشه از اتاق رو گرفته. اگه قرار بود جعبههای قدیمی هیچوقت دور ریخته نشن، اتاق خیلی زود به هم میریخت و جا کم میومد.
کارِ رفتگر پایتون اینه که بیسروصدا توی اتاق بچرخه و این جعبههای بلا استفاده رو پیدا کنه و بندازه بیرون تا جا برای جعبههای جدید باز بشه. اینطوری جلوی پر شدن الکی حافظه (Memory Leak) و کندی برنامه گرفته میشه.
تو قسمت بعد میگیم که این رفتگرِ زرنگ چطوری جعبههای بیمصرف رو تشخیص میده!
تجربیات و نظراتتون رو با لایک و کامنت به ما بگید🌱
@pythopiachannel
تاحالا فکر کردین وقتی کارمون با یه متغیر تموم میشه، چه بلایی سر حافظهای که گرفته میاد؟
اینجا سر و کلهی «رفتگر» پایتون یا همون Garbage Collector (GC) پیدا میشه!
حافظهی کامپیوتر رو یه اتاق بزرگ در نظر بگیرین. هر متغیر، یه جعبهست که یه گوشه از اتاق رو گرفته. اگه قرار بود جعبههای قدیمی هیچوقت دور ریخته نشن، اتاق خیلی زود به هم میریخت و جا کم میومد.
کارِ رفتگر پایتون اینه که بیسروصدا توی اتاق بچرخه و این جعبههای بلا استفاده رو پیدا کنه و بندازه بیرون تا جا برای جعبههای جدید باز بشه. اینطوری جلوی پر شدن الکی حافظه (Memory Leak) و کندی برنامه گرفته میشه.
تو قسمت بعد میگیم که این رفتگرِ زرنگ چطوری جعبههای بیمصرف رو تشخیص میده!
تجربیات و نظراتتون رو با لایک و کامنت به ما بگید🌱
@pythopiachannel
🔥12❤4
شما یک سیستم پیچیده با اجزای داخلی زیاد دارید. برای اینکه کار با این سیستم را برای دیگران ساده کنید و یک رابط کاربری ساده برای آن فراهم کنید از کدام الگو استفاده میکنید؟
Anonymous Quiz
27%
decorator
16%
strategy
38%
facade
20%
builder
🔥10
آرگومانهای موقعیتی (Positional) و کلیدواژهای (Keyword)
وقتی یک تابع را در پایتون صدا میزنیم، میتوانیم مقادیر را به دو روش اصلی به آن بدهیم.
۱. آرگومانهای موقعیتی (Positional)
در این روش، مقادیر بر اساس موقعیت یا ترتیب به پارامترهای تابع اختصاص داده میشوند. اولین مقدار به اولین پارامتر، دومی به دومی و...
ویژگی اصلی: ترتیب اهمیت حیاتی دارد.
۲. آرگومانهای کلیدواژهای (Keyword)
ویژگی اصلی: ترتیب دیگر مهم نیست، چون پایتون از روی نام، مقدار را به پارامتر درست اختصاص میدهد. این روش خوانایی کد را بالا میبرد.
۳.قانون طلایی: ترکیب دو روش
میتوانید از هر دو روش با هم استفاده کنید، اما همیشه آرگومانهای موقعیتی باید قبل از آرگومانهای کلیدواژهای بیایند.
مثال:
@pythopiachannel
وقتی یک تابع را در پایتون صدا میزنیم، میتوانیم مقادیر را به دو روش اصلی به آن بدهیم.
۱. آرگومانهای موقعیتی (Positional)
در این روش، مقادیر بر اساس موقعیت یا ترتیب به پارامترهای تابع اختصاص داده میشوند. اولین مقدار به اولین پارامتر، دومی به دومی و...
ویژگی اصلی: ترتیب اهمیت حیاتی دارد.
۲. آرگومانهای کلیدواژهای (Keyword)
ویژگی اصلی: ترتیب دیگر مهم نیست، چون پایتون از روی نام، مقدار را به پارامتر درست اختصاص میدهد. این روش خوانایی کد را بالا میبرد.
۳.قانون طلایی: ترکیب دو روش
میتوانید از هر دو روش با هم استفاده کنید، اما همیشه آرگومانهای موقعیتی باید قبل از آرگومانهای کلیدواژهای بیایند.
مثال:
def show_info(name, age, city):
print(f"Name: {name}", f"Age: {age}", f"City: {city}")
#آرگومان موقعیتی
show_info("Fateme", 23, "Tehran")
#آرگومان کلیدواژهای
show_info(name="Ali", city="Shiraz", age=30)
#ترکیب (اول موقعیتی، بعد کلیدواژهای)
show_info("Sara", age=19, city="Tabriz")
خروجی رو کامنت کنید.
@pythopiachannel
❤10👏3
اصل DRY - تنبلترین برنامهنویسها، بهترین برنامهنویسها هستند!
امروز میخوایم در مورد یکی از مهمترین اصول برنامهنویسی صحبت کنیم که شما رو به یک توسعهدهنده بهتر تبدیل میکنه: اصل DRY یا Don't Repeat Yourself (خودت را تکرار نکن).
DRY یعنی چی؟ 🤔
اصل DRY خیلی ساده میگه: کد تکراری ننویس! اگر یک قطعه کد رو در چند جای مختلف کپی-پیست کردی، داری این اصل مهم رو زیر پا میذاری.
چرا نباید خودمون رو تکرار کنیم؟
تو پست بعدی با مثال بررسی میکنیم.
@pythopiachannel
امروز میخوایم در مورد یکی از مهمترین اصول برنامهنویسی صحبت کنیم که شما رو به یک توسعهدهنده بهتر تبدیل میکنه: اصل DRY یا Don't Repeat Yourself (خودت را تکرار نکن).
DRY یعنی چی؟ 🤔
اصل DRY خیلی ساده میگه: کد تکراری ننویس! اگر یک قطعه کد رو در چند جای مختلف کپی-پیست کردی، داری این اصل مهم رو زیر پا میذاری.
چرا نباید خودمون رو تکرار کنیم؟
تو پست بعدی با مثال بررسی میکنیم.
@pythopiachannel
👏8🔥5⚡1
بیاید با یک مثال ببینیم. فرض کنید در یک فروشگاه آنلاین، میخوایم قیمت نهایی دو محصول رو با احتساب ۹٪ مالیات حساب کنیم.
روش اشتباه و تکراری (روش WET 💧 - Write Everything Twice):
❌ میبینید که منطق محاسبه مالیات (ضربدر ۰.۰۹) تکرار شده. حالا اگه مالیات بشه ۱۰٪، باید بگردیم و همه اینا رو دستی عوض کنیم!
روش درست و تمیز (روش DRY 🌵):
اینجا منطق تکراری رو توی یک تابع میذاریم.
✅ عالی شد! حالا اگه نرخ مالیات تغییر کنه، فقط و فقط یک خط داخل تابع calculate_final_price رو تغییر میدیم و همهچیز درست کار میکنه.
مزایای DRY بودن:
نگهداری آسانتر: تغییرات فقط در یک نقطه اعمال میشه.
کاهش خطا: ریسک فراموش کردن آپدیت کد تکراری از بین میره.
کد خواناتر و کوتاهتر: کد شما تمیزتر و قابل فهمتر میشه.
پس همیشه یادتون باشه: یک برنامهنویس خوب، تنبله! تنبل از این جهت که کار تکراری انجام نمیده و برای هر چیزی یک راه حل هوشمندانه و مرکزی پیدا میکنه.😌
@pythopiachannel
روش اشتباه و تکراری (روش WET 💧 - Write Everything Twice):
Python
# محاسبه قیمت محصول اول
price1 = 10000
tax1 = price1 * 0.09
final_price1 = price1 + tax1
print(f"قیمت نهایی محصول ۱: {final_price1}")
# محاسبه قیمت محصول دوم
price2 = 50000
tax2 = price2 * 0.09
final_price2 = price2 + tax2
print(f"قیمت نهایی محصول ۲: {final_price2}")
❌ میبینید که منطق محاسبه مالیات (ضربدر ۰.۰۹) تکرار شده. حالا اگه مالیات بشه ۱۰٪، باید بگردیم و همه اینا رو دستی عوض کنیم!
روش درست و تمیز (روش DRY 🌵):
اینجا منطق تکراری رو توی یک تابع میذاریم.
Python
def calculate_final_price(price):
"""قیمت نهایی را با احتساب ۹٪ مالیات محاسبه میکند."""
tax = price * 0.09
return price + tax
# حالا فقط تابع رو صدا میزنیم
final_price1 = calculate_final_price(10000)
print(f"قیمت نهایی محصول ۱: {final_price1}")
final_price2 = calculate_final_price(50000)
print(f"قیمت نهایی محصول ۲: {final_price2}")
✅ عالی شد! حالا اگه نرخ مالیات تغییر کنه، فقط و فقط یک خط داخل تابع calculate_final_price رو تغییر میدیم و همهچیز درست کار میکنه.
مزایای DRY بودن:
نگهداری آسانتر: تغییرات فقط در یک نقطه اعمال میشه.
کاهش خطا: ریسک فراموش کردن آپدیت کد تکراری از بین میره.
کد خواناتر و کوتاهتر: کد شما تمیزتر و قابل فهمتر میشه.
پس همیشه یادتون باشه: یک برنامهنویس خوب، تنبله! تنبل از این جهت که کار تکراری انجام نمیده و برای هر چیزی یک راه حل هوشمندانه و مرکزی پیدا میکنه.😌
@pythopiachannel
🔥9🆒5❤1
دکوراتور | Decorator
تصور کنید یک کادو خریدید و میخواید اون رو خوشگلتر کنید. چیکار میکنید؟ کادوپیچش میکنید! 🎁 دکوراتورها توی پایتون دقیقاً همین کار رو با توابع ما میکنن.
دکوراتور یک تابع خاصه که یک تابع دیگه رو به عنوان ورودی میگیره و بدون اینکه کد اصلی اون تابع رو تغییر بده، یک قابلیت جدید بهش اضافه میکنه و در نهایت، همون تابع رو با قابلیت جدید برمیگردونه.
به چه دردی میخوره؟
یک مثال معروف اندازهگیری زمان اجرای توابع است.
فرض کنید چندتا تابع مختلف دارید و میخواید زمان اجرای هر کدوم رو اندازه بگیرید. اولین راهی که به ذهن میاد اینه که توی تکتک توابع، قبل و بعد از اجرای کد اصلی، زمان رو ثبت و اختلافش رو حساب کنیم. این کار شدنیه، ولی خیلی تکراری و خستهکننده است و اصل DRY (Don't Repeat Yourself) رو نقض میکنه.
اینجاست که دکوراتورها مثل یک قهرمان وارد میشن! 🦸♂️
@pythopiachannel
تصور کنید یک کادو خریدید و میخواید اون رو خوشگلتر کنید. چیکار میکنید؟ کادوپیچش میکنید! 🎁 دکوراتورها توی پایتون دقیقاً همین کار رو با توابع ما میکنن.
دکوراتور یک تابع خاصه که یک تابع دیگه رو به عنوان ورودی میگیره و بدون اینکه کد اصلی اون تابع رو تغییر بده، یک قابلیت جدید بهش اضافه میکنه و در نهایت، همون تابع رو با قابلیت جدید برمیگردونه.
به چه دردی میخوره؟
یک مثال معروف اندازهگیری زمان اجرای توابع است.
فرض کنید چندتا تابع مختلف دارید و میخواید زمان اجرای هر کدوم رو اندازه بگیرید. اولین راهی که به ذهن میاد اینه که توی تکتک توابع، قبل و بعد از اجرای کد اصلی، زمان رو ثبت و اختلافش رو حساب کنیم. این کار شدنیه، ولی خیلی تکراری و خستهکننده است و اصل DRY (Don't Repeat Yourself) رو نقض میکنه.
اینجاست که دکوراتورها مثل یک قهرمان وارد میشن! 🦸♂️
@pythopiachannel
1🔥9❤5
بریم سراغ یک مثال ساده: لاگ گرفتن از زمان اجرا
بیاید یک دکوراتور بنویسیم که زمان اجرای هر تابعی رو که بهش بدیم، حساب کنه و چاپ کنه.
خروجی:
اگه سوالی راجع به دکوریتورها دارید میتونید توی کامنتها بپرسید. ما همه رو میخونیم و جواب میدیم😌
@pythopiachannel
بیاید یک دکوراتور بنویسیم که زمان اجرای هر تابعی رو که بهش بدیم، حساب کنه و چاپ کنه.
import time
# 👇 این دکوراتور ماست
def timing_decorator(func):
def wrapper():
start_time = time.time()
func() # اجرای تابع اصلی
end_time = time.time()
print(f"⏳'{func.__name__}' در {end_time - start_time:.2f} ثانیه اجرا شد.")
return wrapper
# 👇 به همین راحتی ازش استفاده میکنیم
@timing_decorator
def slow_function():
time.sleep(2) # شبیهسازی یک کار زمانبر
print("کار انجام شد!")
# تابع رو صدا میزنیم
slow_function()
خروجی:
کار انجام شد!
⏳'slow_function' در 2.00 ثانیه اجرا شد.
اگه سوالی راجع به دکوریتورها دارید میتونید توی کامنتها بپرسید. ما همه رو میخونیم و جواب میدیم😌
@pythopiachannel
1👍11❤2😢1
Forwarded from انجمن مهندسی کامپیوتر دانشگاه الزهرا(س)تهران
☕️با هزینه یه قهوه، یاد بگیر چطور با هوش مصنوعی پیچیده ترین ایدههات رو زنده کنی!
اگه تو هم نمیتونی منظورت رو به هوش مصنوعی بفهمونی و مسائل پیچیده رو باهاش حل کنی، نگران نباش، این طبیعیه و ما اینجاییم تا بهت راه رو نشون بدیم.
مهندسی پرامپت، کلیدیه که بهت کمک میکنه از AI خروجی های خیره کننده بگیری.
🎁آموزش پرامپتنویسی حرفهای برای ساخت عکس و ویدیو (زاویه دوربین، نورپردازی، سبک هنری و تکنیکهای سینمایی)
🕕پنجشنبه و جمعه | ۱۰ و ۱۱ مهر ۱۴۰۴
ساعت ۱۵ الی ۱۷
هزینه ثبتنام
دانشجویان و دانش آموزان: ۲۰۰ هزار تومان
دانشجویان الزهرا: ۱۴۰ هزار تومان
عموم: ۲۷۰ هزار تومان
📥اطلاعات بیشتر و ثبتنام
support: @pythopia
اگه تو هم نمیتونی منظورت رو به هوش مصنوعی بفهمونی و مسائل پیچیده رو باهاش حل کنی، نگران نباش، این طبیعیه و ما اینجاییم تا بهت راه رو نشون بدیم.
مهندسی پرامپت، کلیدیه که بهت کمک میکنه از AI خروجی های خیره کننده بگیری.
توی این وبینار فشرده، فقط توی دو روز جدیدترین تکنیک های پیشرفته برای بهتر کردن دقت AI، امنیت پرامپت و پروژههای عملی با Hugging Face رو یاد میگیری و تا پنج برابر پاسخ بهتری از مدل های زبانی بزرگ میگیری.
🎁آموزش پرامپتنویسی حرفهای برای ساخت عکس و ویدیو (زاویه دوربین، نورپردازی، سبک هنری و تکنیکهای سینمایی)
🕕پنجشنبه و جمعه | ۱۰ و ۱۱ مهر ۱۴۰۴
ساعت ۱۵ الی ۱۷
هزینه ثبتنام
دانشجویان و دانش آموزان: ۲۰۰ هزار تومان
دانشجویان الزهرا: ۱۴۰ هزار تومان
عموم: ۲۷۰ هزار تومان
📥اطلاعات بیشتر و ثبتنام
support: @pythopia
👏10❤1👎1