🔹 Assertions in Python
🔺 یکی از موارد کاربردی در پایتون assertionها هستند. استفاده از آنها برای اطمینان حاصل کردن از صحت اجرای برنامه و یافتن خطاها در هنگام توسعه و افزایش خوانایی کدهاست.
🔺 ساختار :
ادعاها یا assertionها از دو قسمت تشکیل میشوند. بخش اول یا condition شرایط به وجود آمدن AssertionError را فراهم میکند. زمانی که مقدار expression قرار گرفته در بخش condition برابر با False باشد، AssertionError رخ میدهد و اگر مقدار True باشد برنامه به کار خود ادامه میدهد. برای مثال :
بخش دوم یا message پیامی است که هنگام AssertionError نمایش داده میشود.
🔺 در ادامه به مثال زیر توجه کنید. تابع زیر دو ورودی به عنوان پارامتر دریافت میکند که مقدار اول قیمت و مقدار دوم درصدتخفیف است. در ادامه با استفاده از assert ورودی ها را کنترل کردیم و در صورتی که نتیجه expression داده شده برابر با False باشد، AssertionError رخ میدهد. در واقع با استفاده از assertion ورودی های تابع را کنترل کردیم.
سوالی ممکن است اینجا به وجود بیاید: چرا از if-statment و یا از یک exception برای مثال قبلی استفاده نکردیم؟ به بیان بهتر، دلیل استفاده از assertion چیه؟ هدف از ایجاد assertionها برای آگاهی برنامهنویس از خطاهایی که قابل انتظار نبودند/نیستند است، شرایطی ممکن است وجود داشته باشد که شما احتمال بروز خطا را در برنامه نمیدهید (برای مثال در کد بالا برنامهنویس احتمال نمیدهد که مقدار price کمتر یا برابر صفر باشد، پس از assertion استفاده کرده و در صورتی که مقادیر درست باشند برنامه به کار خودش ادامه میدهد). در اینجور شرایط می توانید از assertion استفاده کنید که اگر برنامه شما بدون باگ باشد AssertionError داده نمیشود و ادامه کدها اجرا خواهد شد ولی اگر یک خطای غیرقابل انتظار رخ دهد برنامه کرش (crash) میکند. به این نکته توجه کنید که هدف assertionها برای دیباگ کردن پروژه است، نه مدیریت خطاهایی که زمان اجرا برنامه رخ میدهد. assertion باعث میشود که شما باگ را ریشهیابی کنید.
🔹 مفسر پایتون هر assert statement را به شکل زیر تفسیر و اجرا میکند:
قبل از اینکه condition بررسی شود، یک شرط اضافی نیز بررسی میشود. این شرط بررسی می کند که آیا مقدار
🔹 دو اشتباه رایجی که در هنگام استفاده از assert statement وجود دارد:
🔹 از assertion برای اعتبارسنجی داده (data validation) استفاده نکنید. همانطور که قبلا اشاره شد در حالت optimization که در آن
در حالت عادی کد بالا بدون مشکل اجرا خواهد شد و در صورتی که شرایط درست باشد product حذف میشود. ولی دو مسئله قابل بحث وجود دارند. مورد اول، هدف استفاده از assertion زمانی بود که خطایی غیرقابل انتظار رخ دهد. از آنجایی که در کد بالا اکثریت کاربران امکان حذف product دارند، گزینه منطقی این نیست که از assertion استفاده کنیم و بهتر است با استفاده از if-statment این مسئله هندل شود. و مسئله بعدی که اهمیت زیادی دارد این است که اگر برنامه در حال optimization باشد assert statement به صورت null-operation رخ میدهد و بدون اینکه داشتن دسترسی کاربر برای حذف محصول بررسی شود، محصول از دیتابیس حذف خواهد شد (در صورتی که نباید این اتفاق رخ میداد).
🔹 اشتباه دوم در هنگام استفاده از assertion که باعث میشود assertion همیشه برابر با True باشه استفاده Tuple است. به مثال زیر دقت کنید.
انتظار میرود برنامه با AssertionError روبهرو شود، ولی این اتفاق نمیافتد،. چرا؟ چون مقدار tuple به صورت کامل به عنوان condition در نظر گرفته میشود و در نتیجه از آنجایی که tuple دارای مقدار است پس AssertionError هرگز رخ نمیدهد.
🔖 #Python, #پایتون
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
🔺 یکی از موارد کاربردی در پایتون assertionها هستند. استفاده از آنها برای اطمینان حاصل کردن از صحت اجرای برنامه و یافتن خطاها در هنگام توسعه و افزایش خوانایی کدهاست.
🔺 ساختار :
assert_stmt ::= "assert" condition ["," message]
ادعاها یا assertionها از دو قسمت تشکیل میشوند. بخش اول یا condition شرایط به وجود آمدن AssertionError را فراهم میکند. زمانی که مقدار expression قرار گرفته در بخش condition برابر با False باشد، AssertionError رخ میدهد و اگر مقدار True باشد برنامه به کار خود ادامه میدهد. برای مثال :
assert 1 < 2 # nothing happens
assert 1 > 2 # AssertionError
بخش دوم یا message پیامی است که هنگام AssertionError نمایش داده میشود.
🔺 در ادامه به مثال زیر توجه کنید. تابع زیر دو ورودی به عنوان پارامتر دریافت میکند که مقدار اول قیمت و مقدار دوم درصدتخفیف است. در ادامه با استفاده از assert ورودی ها را کنترل کردیم و در صورتی که نتیجه expression داده شده برابر با False باشد، AssertionError رخ میدهد. در واقع با استفاده از assertion ورودی های تابع را کنترل کردیم.
def calculate_discount_price(price, discount):
assert price < 0 or discount < 0 or discount > 100
discount_amount = (discount / 100) * price
return price - discount_amount
سوالی ممکن است اینجا به وجود بیاید: چرا از if-statment و یا از یک exception برای مثال قبلی استفاده نکردیم؟ به بیان بهتر، دلیل استفاده از assertion چیه؟ هدف از ایجاد assertionها برای آگاهی برنامهنویس از خطاهایی که قابل انتظار نبودند/نیستند است، شرایطی ممکن است وجود داشته باشد که شما احتمال بروز خطا را در برنامه نمیدهید (برای مثال در کد بالا برنامهنویس احتمال نمیدهد که مقدار price کمتر یا برابر صفر باشد، پس از assertion استفاده کرده و در صورتی که مقادیر درست باشند برنامه به کار خودش ادامه میدهد). در اینجور شرایط می توانید از assertion استفاده کنید که اگر برنامه شما بدون باگ باشد AssertionError داده نمیشود و ادامه کدها اجرا خواهد شد ولی اگر یک خطای غیرقابل انتظار رخ دهد برنامه کرش (crash) میکند. به این نکته توجه کنید که هدف assertionها برای دیباگ کردن پروژه است، نه مدیریت خطاهایی که زمان اجرا برنامه رخ میدهد. assertion باعث میشود که شما باگ را ریشهیابی کنید.
🔹 مفسر پایتون هر assert statement را به شکل زیر تفسیر و اجرا میکند:
if __debug__:
if not condition:
raise AssertionError(message)
قبل از اینکه condition بررسی شود، یک شرط اضافی نیز بررسی میشود. این شرط بررسی می کند که آیا مقدار
__debug__
برابر با True است یا نه. (در حالت عادی این مقدار برابر با True است و در حالت optimization برابر با False)🔹 دو اشتباه رایجی که در هنگام استفاده از assert statement وجود دارد:
🔹 از assertion برای اعتبارسنجی داده (data validation) استفاده نکنید. همانطور که قبلا اشاره شد در حالت optimization که در آن
__debug__
برابر با False میشود، assert statement در حالت null-operation قرار میگیرد، یعنی توسط مفسر تفسیر میشود ولی هیچکدام از assert statement اجرا نخواهند شد. به مثال زیر دقت کنید.def delete_product(user, id):
assert user.has_perm("del_product")
Product.objects.delete(pk=id)
در حالت عادی کد بالا بدون مشکل اجرا خواهد شد و در صورتی که شرایط درست باشد product حذف میشود. ولی دو مسئله قابل بحث وجود دارند. مورد اول، هدف استفاده از assertion زمانی بود که خطایی غیرقابل انتظار رخ دهد. از آنجایی که در کد بالا اکثریت کاربران امکان حذف product دارند، گزینه منطقی این نیست که از assertion استفاده کنیم و بهتر است با استفاده از if-statment این مسئله هندل شود. و مسئله بعدی که اهمیت زیادی دارد این است که اگر برنامه در حال optimization باشد assert statement به صورت null-operation رخ میدهد و بدون اینکه داشتن دسترسی کاربر برای حذف محصول بررسی شود، محصول از دیتابیس حذف خواهد شد (در صورتی که نباید این اتفاق رخ میداد).
🔹 اشتباه دوم در هنگام استفاده از assertion که باعث میشود assertion همیشه برابر با True باشه استفاده Tuple است. به مثال زیر دقت کنید.
assert (1 > 2, "This condition is not valid")
انتظار میرود برنامه با AssertionError روبهرو شود، ولی این اتفاق نمیافتد،. چرا؟ چون مقدار tuple به صورت کامل به عنوان condition در نظر گرفته میشود و در نتیجه از آنجایی که tuple دارای مقدار است پس AssertionError هرگز رخ نمیدهد.
🔖 #Python, #پایتون
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
👍16❤1🔥1
📊 کار با داده های آماری در پایتون
توی این پست میخوایم ببینیم چجوری باید با داده های آماری داخل پایتون کار کرد. تو پایتون یه ماژول داخلی وجود داره به اسم statistics که دقیقا مخصوص همین کاره 👌
نیازی به نصب نداره و فقط کافیه با دستور زیر ایمپورتش کنید 👇
این ماژول به شما این امکان رو میده تا یه سری محاسبات ساده رو انجام بدید مثل گرفتن میانگین، مد، انحراف معیار و واریانس
اول باید از لحاظ ریاضی بدونیم اینا چی هستن :
میانگین (Average): اگر اعدادی رو جمع کنید با همدیگه و به تعدادشون تقسیم کنید. مثل
(5 + 4 + 3) / 3 = 4
میانه (Median): اگر اعدادی را از کوچک به بزرگ مرتب کنیم و عددی که وسط این اعداد قرار گرفته رو حساب کنیم میشه میانه. در مثال زیر به عنوان مثال میانه 3 است
1, 2, 3, 4, 5
انحراف معیار (Standard Deviation): نشون میده عددهای یه مجموعه چقدر دور یا نزدیک به میانگین (متوسط) هستن.
واریانس (Variance): مثل انحراف معیاره، ولی به جای اینکه مستقیماً فاصله عددها از میانگین رو بگه، فاصلهها رو به توان دو میرسونه و بعد میانگینشون رو میگیره.
مد (Mode): داده ای که بیشترین تکرار رو داخل یه مجموعه داره.
حالا بیاید وارد کد بشیم و چیزایی رو که گفتیم امتحان کنیم 😃
برای مثال ها از لیستی به اسم data استفاده میکنیم
برای گرفتن میانگین باید اعدادمون رو داخل یه لیست بزاریم و بعدش از تابع mean که این ماژول در اختیارمون میذاره استفاده کنیم:
برای گرفتن میانه باید از تابع median استفاده کنیم :
برای گرفتن انحراف معیار باید از تابع stdev استفاده کنیم:
برای گرفتن واریانس باید از تابع variance استفاده کنیم:
برای گرفتن مد باید از تابع mode استفاده کنیم:
به همین راحتی !! 👌
البته باید اینم بگم که اگه نیاز به تحلیل های آماری پیچیدهتری دارید باید از کتابخونه هایی مثل NumPy استفاده کنید
امیدوارم از این پست لذت برده باشید و مفید باشه براتون 🙏
🔖 #Python, #پایتون
👤 soroushGH
💎 Channel: @DevelopixPython
توی این پست میخوایم ببینیم چجوری باید با داده های آماری داخل پایتون کار کرد. تو پایتون یه ماژول داخلی وجود داره به اسم statistics که دقیقا مخصوص همین کاره 👌
نیازی به نصب نداره و فقط کافیه با دستور زیر ایمپورتش کنید 👇
import statistics
این ماژول به شما این امکان رو میده تا یه سری محاسبات ساده رو انجام بدید مثل گرفتن میانگین، مد، انحراف معیار و واریانس
اول باید از لحاظ ریاضی بدونیم اینا چی هستن :
میانگین (Average): اگر اعدادی رو جمع کنید با همدیگه و به تعدادشون تقسیم کنید. مثل
(5 + 4 + 3) / 3 = 4
میانه (Median): اگر اعدادی را از کوچک به بزرگ مرتب کنیم و عددی که وسط این اعداد قرار گرفته رو حساب کنیم میشه میانه. در مثال زیر به عنوان مثال میانه 3 است
1, 2, 3, 4, 5
انحراف معیار (Standard Deviation): نشون میده عددهای یه مجموعه چقدر دور یا نزدیک به میانگین (متوسط) هستن.
واریانس (Variance): مثل انحراف معیاره، ولی به جای اینکه مستقیماً فاصله عددها از میانگین رو بگه، فاصلهها رو به توان دو میرسونه و بعد میانگینشون رو میگیره.
مد (Mode): داده ای که بیشترین تکرار رو داخل یه مجموعه داره.
حالا بیاید وارد کد بشیم و چیزایی رو که گفتیم امتحان کنیم 😃
برای مثال ها از لیستی به اسم data استفاده میکنیم
data = [3, 5, 7, 10, 15]
برای گرفتن میانگین باید اعدادمون رو داخل یه لیست بزاریم و بعدش از تابع mean که این ماژول در اختیارمون میذاره استفاده کنیم:
mean = statistics.mean(data)
print("میانگین:", mean)
برای گرفتن میانه باید از تابع median استفاده کنیم :
median = statistics.median(data)
print("میانه:", median)
برای گرفتن انحراف معیار باید از تابع stdev استفاده کنیم:
stdev = statistics.stdev(data)
print("انحراف معیار:", stdev)
برای گرفتن واریانس باید از تابع variance استفاده کنیم:
variance = statistics.variance(data)
print("واریانس:", variance)
برای گرفتن مد باید از تابع mode استفاده کنیم:
data = [3, 5, 5, 7, 5, 10, 15]
mode = statistics.mode(data)
print("مد:", mode)
به همین راحتی !! 👌
البته باید اینم بگم که اگه نیاز به تحلیل های آماری پیچیدهتری دارید باید از کتابخونه هایی مثل NumPy استفاده کنید
امیدوارم از این پست لذت برده باشید و مفید باشه براتون 🙏
🔖 #Python, #پایتون
👤 soroushGH
💎 Channel: @DevelopixPython
👍24❤3🔥1
عملگر والروس (Walrus Operator) 🦭
عملگر والروس (Walrus Operator) با نماد
⁉️ چرا به آن والروس میگویند؟
نام "والروس" به دلیل شباهت ظاهری این عملگر به عاجهای یک والروس (شیر دریایی) به آن داده شده است.
⁉️ چگونه کار میکند؟
کار این عملگر انجام دستورات، و در عین حال assign کردن مقدار به متغیر می باشد.
این عملگر در حالت استاندارد باید در داخل پرانتز قرار بگیرد. به نحوه استفاده و سینتکس این عملگر توجه کنید:
سادهترین مثال برای درک این عملگر، استفاده از آن در یک عبارت شرطی است:
در این مثال، ما طول رشته "hello" را محاسبه میکنیم و نتیجه را هم به متغیر n اختصاص میدهیم و هم در شرط if استفاده میکنیم. این کار باعث میشود که ما مجبور نباشیم قبل از شرط، طول رشته را در یک متغیر جداگانه ذخیره کنیم.
🆚 مقایسه با روش سنتی
بدون استفاده از عملگر والروس، برای انجام همین کار باید به صورت زیر عمل میکردیم:
همانطور که میبینید، استفاده از این عملگر باعث میشود کد ما کوتاهتر و خواناتر شود.
✅ کاربردهای دیگر عملگر والروس
0️⃣ حلقههای while:
1️⃣ فهمپذیرتر کردن کد:
2️⃣ کاهش تکرار کد:
❇️ نمونه کد
🔴 نمونه کد بدون استفاده از عملگر والرس:
🟢 نمونه کد با استفاده از عملگر والرس:
⚠️ نکات مهم
0️⃣ استفاده احتیاطانه:
اگرچه عملگر والروس میتواند کد شما را کوتاهتر کند، اما استفاده بیش از حد از آن میتواند خوانایی کد را کاهش دهد.
1️⃣ پایتون 3.8 به بعد:
این عملگر از نسخه 3.8 پایتون به بعد اضافه شده است و در استفاده از نسخه های قدیمی تر به سینتکس ارور برخورد خواهید کرد.
♻️ جمعبندی
والروس یک عملگر قدرتمند برای نوشتن کدهای پایتون بهینه و خواناتر است. با استفاده از این عملگر، میتوانید کدهای خود را کوتاهتر کرده و از تکرار کد جلوگیری کنید. با این حال، مهم است که از این عملگر به صورت مناسب استفاده کنید تا خوانایی کد شما کاهش نیابد.
💠 برای داشتن اطلاعات بیشتر در مورد عملگر ها میتوانید این پست را هم مطالعه کنید.
🔖 #Python, #پایتون, #Operatos, #عملگر
👤 LightNess
💎 Channel: @DevelopixPython
عملگر والروس (Walrus Operator) با نماد
:=
، یکی از ویژگیهای نسبتا جدیدی است که از نسخه 3.8 پایتون به آن اضافه شده است. این عملگر به شما اجازه میدهد در یک عبارت هم مقدار یک متغیر را تعیین کنید و هم آن را برگردانید. این ویژگی باعث میشود کدهای شما کوتاهتر و خواناتر شوند، به خصوص در مواردی که نیاز به مقداردهی اولیه یک متغیر درون یک عبارت شرطی یا حلقه دارید.⁉️ چرا به آن والروس میگویند؟
نام "والروس" به دلیل شباهت ظاهری این عملگر به عاجهای یک والروس (شیر دریایی) به آن داده شده است.
⁉️ چگونه کار میکند؟
کار این عملگر انجام دستورات، و در عین حال assign کردن مقدار به متغیر می باشد.
این عملگر در حالت استاندارد باید در داخل پرانتز قرار بگیرد. به نحوه استفاده و سینتکس این عملگر توجه کنید:
(variable := expression)
سادهترین مثال برای درک این عملگر، استفاده از آن در یک عبارت شرطی است:
if (n := len("hello")) > 4:
print(f"String length is greater than 4: {n}")
در این مثال، ما طول رشته "hello" را محاسبه میکنیم و نتیجه را هم به متغیر n اختصاص میدهیم و هم در شرط if استفاده میکنیم. این کار باعث میشود که ما مجبور نباشیم قبل از شرط، طول رشته را در یک متغیر جداگانه ذخیره کنیم.
🆚 مقایسه با روش سنتی
بدون استفاده از عملگر والروس، برای انجام همین کار باید به صورت زیر عمل میکردیم:
n = len("hello")
if n > 4:
print(f"String length is greater than 4 : {n}")
همانطور که میبینید، استفاده از این عملگر باعث میشود کد ما کوتاهتر و خواناتر شود.
✅ کاربردهای دیگر عملگر والروس
0️⃣ حلقههای while:
while (line := f.readline()):
# پردازش هر خط از فایل
1️⃣ فهمپذیرتر کردن کد:
if (match := re.search(pattern, text)):
print(match.group())
2️⃣ کاهش تکرار کد:
if (numbers := [1, 2, 3]) and len(numbers) > 2:
# انجام کاری با لیست numbers
❇️ نمونه کد
🔴 نمونه کد بدون استفاده از عملگر والرس:
while True:
command = input("> ")
if command == 'exit':
break
print("Your command was:", command)
🟢 نمونه کد با استفاده از عملگر والرس:
while (command := input("> ")) != "exit":
print("Your command was:", command)
⚠️ نکات مهم
0️⃣ استفاده احتیاطانه:
اگرچه عملگر والروس میتواند کد شما را کوتاهتر کند، اما استفاده بیش از حد از آن میتواند خوانایی کد را کاهش دهد.
1️⃣ پایتون 3.8 به بعد:
این عملگر از نسخه 3.8 پایتون به بعد اضافه شده است و در استفاده از نسخه های قدیمی تر به سینتکس ارور برخورد خواهید کرد.
♻️ جمعبندی
والروس یک عملگر قدرتمند برای نوشتن کدهای پایتون بهینه و خواناتر است. با استفاده از این عملگر، میتوانید کدهای خود را کوتاهتر کرده و از تکرار کد جلوگیری کنید. با این حال، مهم است که از این عملگر به صورت مناسب استفاده کنید تا خوانایی کد شما کاهش نیابد.
💠 برای داشتن اطلاعات بیشتر در مورد عملگر ها میتوانید این پست را هم مطالعه کنید.
🔖 #Python, #پایتون, #Operatos, #عملگر
👤 LightNess
💎 Channel: @DevelopixPython
🔥8👍6❤2
📊 رسم نمودار با پایتون
بسیاری از شما داده هایی داشتید که نیاز بوده با آنها نموداری رسم کنید و شما به دنبال کتابخونه ای برای انجام این کار بودید.
امروز اومدم چند کتابخونه رو معرفی کنم که با اونها میتونید به راحتی نمودار هایی رو رسم کنید.
1. matplotlib
این کتابخونه محبوب ترین کتابخونه رسم نمودار هست که کار با اون بسیار راحت و سریع هست.
با این کتابخونه میتونید نمودار های خطی، میله ای، دایره ای، جعبه ای، تصویری و.. رو رسم کنید.
2. seaborn
این کتابخونه با الهام گرفتن از کتابخونه matplotlib نمودار ها رو رسم میکنه اما تفاوتشون توی زیبایی نمودار هاست که این کتابخونه بهتر و زیباتر است.
استفاده از پالت های رنگی متفاوت، راحتی کار با دادی های جدولی تنظیمات بصری پیشرفته بخشی از امکانات این کتابخونهست.
3. plotly
با این کتابخونه میتونید نمودار ها رو به صورت پویا رسم کنید، جوری که امکان زوم و تحلیل اون رو داشته باشید.
با خوندن داکیومنت این پروژه میتونید نمودار های فوقالعاده ای که میشه با اون رسم کرد رو ببینید.
4. bokeh
با این کتابخونه میتونید نمودار های پویا و تعاملی برای وب رسم کنید.
از سری امکانات این کتابخونه زوم، اسکرول، پن، انتخاب و ابزار هایی برای کاوش دادهست.
همچنین امکان ادغام با فریمورک های جنگو و فلسک رو داره.
کتابخونه های زیادی وجود داره اما این کتابخونه ها بیشترین استفاده رو بین کاربران دارند.
🔖 #Python, #Chart, #پایتون, #نمودار, #چارت
👤 Yasin
💎 Channel: @DevelopixPython
بسیاری از شما داده هایی داشتید که نیاز بوده با آنها نموداری رسم کنید و شما به دنبال کتابخونه ای برای انجام این کار بودید.
امروز اومدم چند کتابخونه رو معرفی کنم که با اونها میتونید به راحتی نمودار هایی رو رسم کنید.
1. matplotlib
این کتابخونه محبوب ترین کتابخونه رسم نمودار هست که کار با اون بسیار راحت و سریع هست.
با این کتابخونه میتونید نمودار های خطی، میله ای، دایره ای، جعبه ای، تصویری و.. رو رسم کنید.
2. seaborn
این کتابخونه با الهام گرفتن از کتابخونه matplotlib نمودار ها رو رسم میکنه اما تفاوتشون توی زیبایی نمودار هاست که این کتابخونه بهتر و زیباتر است.
استفاده از پالت های رنگی متفاوت، راحتی کار با دادی های جدولی تنظیمات بصری پیشرفته بخشی از امکانات این کتابخونهست.
3. plotly
با این کتابخونه میتونید نمودار ها رو به صورت پویا رسم کنید، جوری که امکان زوم و تحلیل اون رو داشته باشید.
با خوندن داکیومنت این پروژه میتونید نمودار های فوقالعاده ای که میشه با اون رسم کرد رو ببینید.
4. bokeh
با این کتابخونه میتونید نمودار های پویا و تعاملی برای وب رسم کنید.
از سری امکانات این کتابخونه زوم، اسکرول، پن، انتخاب و ابزار هایی برای کاوش دادهست.
همچنین امکان ادغام با فریمورک های جنگو و فلسک رو داره.
کتابخونه های زیادی وجود داره اما این کتابخونه ها بیشترین استفاده رو بین کاربران دارند.
🔖 #Python, #Chart, #پایتون, #نمودار, #چارت
👤 Yasin
💎 Channel: @DevelopixPython
❤8👍8🔥1
🔶 جنگو
🔶 بخش اول
🔻 تاریخچه جنگو
🔻 مفهوم فریمورک
🔻 مفهوم ORM
🌐 منابع :
🔗 ORM : Open
🔗 Django : Open
🔖 #Python, #پایتون, #Django, #جنگو, #orm, #فریمورک
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
🔶 بخش اول
🔻 تاریخچه جنگو
جنگو (Django) یک فریمورک قدرتمند و متنباز است که به زبان پایتون برای توسعه وب نوشته شده است و به توسعهدهندگان کمک میکند سریعتر، بهتر و امنتر برنامههای تحت وب را ایجاد کنند. این فریمورک با معماری MTV (Model-Template-View)، امکانات پیشرفتهای مثل مدیریت خودکار دیتابیس، احراز هویت کاربر، و ابزارهای امنیتی قدرتمند ارائه میدهد.
جنگو اولین بار در سال ۲۰۰۳ توسط گروهی از توسعهدهندگان در یک شرکت خبری به نام Lawrence Journal-World در کانزاس آمریکا توسعه داده شد. هدف اولیه از ساخت آن، تسریع فرآیند توسعه وبسایتهای خبری بود که نیازمند بهروزرسانیهای مکرر و عملکرد بالا بودند.
نام جنگو از جنگو راینهارت (Django Reinhardt)، نوازنده برجسته گیتار جاز، الهام گرفته شده و هدف از اینکار بخاطر این بوده که توسعهدهندگان این فریمورک میخواستند سرعت و انعطافپذیری این نوازنده را در نام محصول خود منعکس کنند.
همچنین در سال ۲۰۰۵، جنگو بهصورت متنباز منتشر شد و از آن زمان به یکی از محبوبترین فریمورکهای توسعه وب تبدیل شده است. از ابتدا، تیم جنگو بر روی ارائه ابزارهایی برای مدیریت پیچیدگیهای توسعه وب، مانند احراز هویت، مدیریت دیتابیس، و امنیت، تمرکز دارد و امروز جنگو توسط یک جامعه بزرگ از توسعهدهندگان پشتیبانی میشود و در پروژههای متنوعی، از وبسایتهای کوچک تا اپلیکیشنهای پیچیده، استفاده میشود.
🔻 مفهوم فریمورک
فریمورک (Framework) یک بستر یا چارچوب آماده است که ابزارها، کتابخانهها، و قوانین از پیش تعریفشدهای را برای تسهیل (آسان کردن) و تسریع (افزایش سرعت) فرآیند توسعه ارائه میدهد. به عبارت دیگر، فریمورکها به توسعهدهندگان کمک میکنند تا به جای شروع از صفر، از ساختارها و الگوهای از پیش طراحیشده استفاده کنند و بر بخشهای خاص پروژه تمرکز بیشتری داشته باشند.
بر خلاف برنامههایی که در حالت عادی نوشته می شود که احتمالا شامل یک و یا مجموعهای از فایلهای پایتونی است و برنامهنویس بسته به نیاز پروژه از کتابخانه های مختلف استفاده میکند، در فریمورک مدیریت نصب و استفاده لایبریها به وسیله فریمورک اتفاق میفتد.
هنگام استفاده از فریمورک برنامه نویس موظف است از ساختار فریمورک پیروی کند و محتوای مربوط به پروژه را بر اساس قوانین از قبل تعریف شده قرار دهد. برای مثال، جنگو، که یک فریمورک برای توسعه وب است، هنگام استفاده یک ساختار از قبل تعیین شده ایجاد میکند که شامل فایلها و دایرکتوریها است و کدهای مربوط به views و urls و configurations پروژه در فایلهای مشخص قرار میگیرد. این ساختار باعث می شود که درصد خوانایی کد افزایش پیدا کند و پروژه به بخشهای کوچکتری تقسیم شود.
از ویژگی های کلیدی فریمورک می توان به ساختاردهی پروژه، ابزارهای آماده، افزایش بهرهوری، امنیت اشاره کرد.
🔻 مفهوم ORM
مدیریت دیتابیس در جنگو به وسیله ORM اتفاق میفتد، ORM یا Object-Relational Mapping یک تکنیک در برنامهنویسی است که ارتباط بین اشیاء (Objects) در برنامه و جداول پایگاه داده را فراهم میکند در واقع orm پلی بین پارادایم برنامه نویسی OOP و پایگاه داده است. به زبان ساده، ORM به توسعهدهندگان اجازه میدهد بدون نیاز به نوشتن مستقیم کدهای SQL، با پایگاه داده کار کنند.
در برنامهنویسی شیگرا، دادهها معمولاً به صورت اشیاء ذخیره و مدیریت میشوند، در حالی که database دادهها را به صورت جدول ذخیره میکنند. ORM این دو دنیا را به هم متصل میکند و امکان تعامل بین آنها را سادهتر می کند.
استفاده از ORM سبب افزایش روند توسعه، افزایش امنیت و کاهش هزینه می شود.
🌐 منابع :
🔗 ORM : Open
🔗 Django : Open
🔖 #Python, #پایتون, #Django, #جنگو, #orm, #فریمورک
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
🔥11👍3
این فریمورک تا حد زیادی قابل قبول نوشته شده. به راحتی امکان استفاده از تمام method هارو فراهم کرده و مزیت بزرگی این فریمورک اینه که شما مستقیما با MTProto API در ارتباط هستید و واسطهای وجود نداره. پایروگرام از tgcrypto برای رمزنگاری استفاده میکنه تا بتونه با MTProto در ارتباط باشه. این کتابخونه با زبان C نوشته شده و باعث بهبود سرعته.
یکی از معایب بزرگ این فریمورک بروز نبودن اونه. تلگرام در یک سال اخیر تغییرات زیادی داشته و این فریمورک خودش رو بروز نکرده. پس شما به ناچار مجبور به استفاده از یکی از fork های اون هستید. پیشنهاد من استفاده از این fork هستش.
از بابت مستندات این فریمورک مشکلی خاصی نداره و توضیحات تمیز و مرتب برای یادگیری نوشته شدند و درعین حال با جزئیات کامل هستند.
فریمورک بعدی که مستقیما با MTProto ارتباط برقرار میکنه telethon هستش. این package نسبتا بروز و منعطف نوشته شده. برای بهبود سرعت، این فریمورک از افزونه یا کتابخونه خاص خودش به اسم cryptg استفاده میکنه. از مزایای این فریمورک داشتن امکانات مازاد هستش؛ به عنوان مثال اگر pillow نصب شده باشه کار resize کردن تصاویر رو خودش انجام میده. یا از hachoir و aiohttp برای دانلود و مدیریت document ها استفاده میکنه.
شباهت زیاد pyrogram و telethon قابل چشم پوشی نیست؛ با تسلط به یکی از این دو، میتونید ظرف کمتر از یک ساعت با مورد دیگه بطور کلی آشنایی پیدا کنید. از نحوه log کردن ها، ساختار کلاس client و سایر کلاس ها، اسامی method ها بگیرید تا نحوه استفاده از proxy ها و dispather هر دو فریمورک. شباهت این دو غیرقابل انکاره.
با وجود پیچیدگی MTProto این فریمورک و pyrogram ساختاری مشابه telebot دارند (از بابت پیاده سازی کد) و شما تقریبا حتی متوجه پیچیدگی MTProto نخواهید شد.
این فریمورک برخلاف دو فریمورک قبلی مستقیما با MTProto درارتباط نیست و نویسندگان اون ترجیح دادند که کار رو با BotAPI جلو ببرند. از بابت ساختار فوقالعاده ساده و اصطلاحا کارراهبنداز هستش. عملکرد این فریمورک به شکل long polling صورت میگیره و داده به صورت http دریافت و ارسال میشه. درحالت کلی میشه گفت که اندکی از دو فریمورکی که نام بردیم سرعت کمتری رو دارا هستش اما این دال بر این نیست که امکانات کمی رو مهیا کرده باشه و اگر نگاهی به لیست مطرح ترین کتابخانه های مرتبط به ربات های تلگرامی بیاندازیم، قطعا telebot رو در بین اونها میبینیم.
نمیتونیم مستندات این فریمورک رو تمیز بنامیم، اما نمیشه گفت که کامل هم نیستند و تمامی توضیحات ارائه شدند. ولی برای یادگیری توصیه نمیکنم که با این مستندات جلو برید چون برای دادن جزئیات کامل طراحی شده، نه برای آموزش.
همونطور که telethon رو فریمورکی مشابه pyrogram خطاب کردیم، اینجا هم میتونیم aiogram رو چیزی مشابه telebot بنامیم. این فریمورک بطور خاص برای استفاده از مفهوم asynchronous طراحی شده. یکی از ویژگی های خوب این فریمورک اینه که به لطف tg-codegen هیچ وقت از بروزرسانی های BotAPI عقب نمیمونه. از aiohttp استفاده می کنه و از بابت سرعت و عملکرد تقریبا مشابه telebot هستش.
یکی دیگه از فریمورک هایی که بر اساس BotAPI کار میکنه با اسم PTB شناخته میشه. این فریمورک دارای یک wiki خوبه و برای یادگیری بسیار مناسبه. به عنوان یکی از قدیمی ترین فریمورک ها درحاضر در سرویس های زیادی استفاده میشه و با آخرین نسخه BotAPI کاملا هماهنگه. از بابت عملکرد کلی توضیح خاصی نداره چون مشابه دو مورد قبل از http requests استفاده میکنه و میشه گفت که تا حدودی شبیه telebot هستش. کامیونیتی بزرگی داره و همونطور که اشاره شد کاربران زیادی بهش علاقهمند هستند.
پیشنهاد شخصی من استفاده از pyrogram هست. این فریمورک در عین سادگی هنگام استفاده میتونه کاملا منعطف عمل کنه و پاسخگوی تمام نیاز های شما باشه. به نسبت رقبای خودش سرعت نسبتا بهتری داره و با وجود uvloop و tgcrypto این اختلاف افزایش سرعت بیشتر هم به چشم دیده میشه. به راحتی قابل استفادهست و امکانات بیشتری نسبت به سایر موارد مطرح شده داره و دسترسی کامل به MTProtoAPI به شما میده. همه این موارد در کنار هم اون رو تا حدودی نسبت به رقبای خودش ممتاز میکنه.
اگر تجربه ای دارید که فکر میکنید میتونه مفید باشه اون رو کامنت کنید و برای اطلاعات بیشتر به کانال ربات تلگرام مراجعه کنید.
🔖 #ربات, #تلگرام, #bot, #python, #pyrogram, #telethon
💎 Channel: @DevelopixPython
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
| کانال ربات تلگرام |
⭕️ کانال توسعهدهندگان ربات تلگرام دولوپیکس
💠 دولوپیکس | جامعه توسعهدهندگان ایرانی
💎 @Developix
🚀 Developix.ir
📌 پشتیبانی و تبلیغات:
@DevelopixSupport
💠 دولوپیکس | جامعه توسعهدهندگان ایرانی
💎 @Developix
🚀 Developix.ir
📌 پشتیبانی و تبلیغات:
@DevelopixSupport
👍8❤5
🔹 انواع ارور ها در پایتون
🔸 بخش اول
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— SyntaxError
یکی از خطا های رایج در پایتون این ارور هست. هنگامی این ارور اتفاق میافتد که شما نگارش و قانون نوشتاری کد های پایتونی را رعایت نکرده باشید.
برخی از دلایل نمایش SyntaxError:
• نبستن استرینگ
• غلط املایی در نوشتار کلمات کلیدی
• استفاده از سینتکس ورژن جدید پایتون در ورژن های قدیمیتر
• فراموش کردن بستن براکت، آکولاد یا پرانتز
مثال:
— IndentionError
در پایتون این ارور زمانی نمایش داده میشود که شما تو رفتگی ها را به خوبی رعایتنکرده باشید.
چند مورد از دلایل وقوع این ارور:
• فاصله های نادرست
• بلوک های تودرتوی نادرست
• فضای خالی در ابتدای شروع یک دستور
مثال:
— NameError
اگر هنگام استفاده از یک متغیر، آن متغیر تعریف نشده باشد این ارور را مشاهده خواهید کرد.
برای رفع این ارور اطمینان حاصل کنید که متغیر یا تابعی که از آن استفاده میکنید تعریف شده باشد.
مثال:
— ValueError
هنگامی این ارور رخ میدهد که نوع مقدار ورودی شما صحیح نیست.
مانند وقتی که یک input با تایپ int تعریف کرده باشید اما کاربر یک استرینگ به آن پاس دهد.
مثال:
— TypeError
این ارور هنگامی رخ میدهد که شما عملیاتی انجام دهید که برای آن نوع داده نامناسب باشد.
مانند زمانی که یک استرینگ را با یک تایپ int تقسیم کنید.
مثال:
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش اول
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— SyntaxError
یکی از خطا های رایج در پایتون این ارور هست. هنگامی این ارور اتفاق میافتد که شما نگارش و قانون نوشتاری کد های پایتونی را رعایت نکرده باشید.
برخی از دلایل نمایش SyntaxError:
• نبستن استرینگ
• غلط املایی در نوشتار کلمات کلیدی
• استفاده از سینتکس ورژن جدید پایتون در ورژن های قدیمیتر
• فراموش کردن بستن براکت، آکولاد یا پرانتز
مثال:
a = "salam
print(a)
SyntaxError: unterminated string literal
— IndentionError
در پایتون این ارور زمانی نمایش داده میشود که شما تو رفتگی ها را به خوبی رعایتنکرده باشید.
چند مورد از دلایل وقوع این ارور:
• فاصله های نادرست
• بلوک های تودرتوی نادرست
• فضای خالی در ابتدای شروع یک دستور
مثال:
a = "salam"
if a:
print(a)
IndentationError: expected an indented block after 'if' statement
— NameError
اگر هنگام استفاده از یک متغیر، آن متغیر تعریف نشده باشد این ارور را مشاهده خواهید کرد.
برای رفع این ارور اطمینان حاصل کنید که متغیر یا تابعی که از آن استفاده میکنید تعریف شده باشد.
مثال:
print(a)
a = 10
NameError: name 'a' is not defined
— ValueError
هنگامی این ارور رخ میدهد که نوع مقدار ورودی شما صحیح نیست.
مانند وقتی که یک input با تایپ int تعریف کرده باشید اما کاربر یک استرینگ به آن پاس دهد.
مثال:
age = int(input("age: ")) #input: Yasin
ValueError: invalid literal for int() with base 10: 'Yasin'
— TypeError
این ارور هنگامی رخ میدهد که شما عملیاتی انجام دهید که برای آن نوع داده نامناسب باشد.
مانند زمانی که یک استرینگ را با یک تایپ int تقسیم کنید.
مثال:
print("hello" / 3)
TypeError: unsupported operand type(s) for /: 'str' and 'int'
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
👍11🔥5❤3
🔶 جنگو
🔶 بخش دوم
🔻 فلسفه معماری MVC
🔻 تاریخچه معماری MVC
🔻 بررسی معماری MVC
🔻 بررسی معماری MVT
🔻 معماری MVT در هنگام استفاده از API
🔻 نتیجهگیری
🌐 منبع تکمیلی
🔖 #Python, #پایتون, #Django, #جنگو, #orm, #فریمورک
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
🔶 بخش دوم
🔻 فلسفه معماری MVC
فلسفه معماری MVC (Model-View-Controller) براساس تفکیک مسئولیتها در طراحی و توسعه نرمافزار است. در گذشته توسعه و پیادهسازی بخشهای مختلف برنامه نظیر بخش رابطه کاربری، مدیریت داده و بخش کنترلکننده در یک فایل پیاده سازی میشد و همین موضوع افزایش پیچیدگی، کاهش مقیاس پذیری و سخت شدن توسعه و ترمیم کدها را به همراه داشت و در نتیجه این موضوع سبب شد تا معماری تحت عنوان MVC ایجاد شود.
🔻 تاریخچه معماری MVC
معماری MVC در سال 1979 توسط Trygve Reenskaug در مرکز تحقیقاتی Xerox PARC و در حین کار با زبان Smalltalk معرفی شد. هدف این معماری جداسازی منطق کسبوکار از رابط کاربری بود تا نرمافزارها انعطافپذیرتر و قابل نگهداریتر باشند. MVC ابتدا در سیستمهای گرافیکی Smalltalk برای مدیریت رابطهای کاربری تعاملی بهکار رفت و بهتدریج به یک الگوی اصلی در توسعه نرمافزار تبدیل شد.
در دهه 1990، با گسترش برنامه های تحت وب، MVC بهوسیله فریمورکهایی مانند Java Struts و Ruby on Rails وارد دنیای وب شد. این الگو به دلیل تفکیک مسئولیتها و ساختار منظم، محبوبیت بالایی در توسعه برنامههای پیچیده یافت. در دهه 2000، فریمورکهایی مانند Django، ASP.NET MVC، و Spring MVC این معماری را بهعنوان هسته طراحی خود پذیرفتند.
با ظهور معماریهای مدرن مانند MVVM و ابزارهایی مانند React و Angular، مفهوم MVC تغییراتی را تجربه کرد اما همچنان بهعنوان یکی از بنیادیترین الگوهای معماری در طراحی نرمافزار باقی مانده است.
🔻 بررسی معماری MVC
معماری MVC یک الگوی طراحی برای توسعه برنامههای وب است (البته هدف اصلی از ایجاد MVC در متن بالا توضیح داده شد). معماری MVC از سه بخش اصلی تشکیل شده است.
◇ بخش اول مدل (Model):
این بخش مسئول مدیریت دادهها و منطق کسبوکار است. این بخش تمام عملیات مرتبط با ذخیرهسازی، بازیابی، و پردازش دادهها را انجام میدهد و با پایگاه داده تعامل دارد. Model مستقل از رابط کاربری است و تنها دادههای پردازششده را برای View و Controller آماده میکند. به عنوان مثال، در یک سیستم رزرو هتل، مدل وظیفه دارد ظرفیت خالی اتاقها را بررسی کند و اطمینان یابد که رزرو جدید برای هتل امکان پذیر است یا خیر. همچنین، اگر رزروی لغو شود، مدل باید ظرفیت را بهروزرسانی کند. در این سناریو، Model شامل قوانین کسبوکار (Business Logic) مانند "هر اتاق فقط یک رزرو میتواند داشته باشد" است و این قوانین را هنگام ذخیره یا تغییر دادهها اعمال میکند.
◇ بخش دوم نما (View):
بخش View مسئول نمایش دادهها به کاربر است. این بخش فقط بر نمایش اطلاعات تمرکز دارد و هیچ منطق پردازشی مرتبط با دادهها یا منطق کسبوکار را شامل نمیشود. View دادهها را از Model دریافت کرده و به کاربر نمایش میدهد.
برای مثال، در یک سیستم فروشگاهی آنلاین، بخش نما میتواند صفحهای باشد که لیست محصولات را به کاربر نشان میدهد. View فقط از اطلاعات موجود در Model (مانند نام، قیمت، و توضیحات محصول) استفاده میکند و آنها را در قالب HTML به نمایش درمیآورد. این بخش هیچگونه پردازش روی دادهها انجام نمیدهد، بلکه فقط آنها را به شکلی قابل فهم و مرتب به کاربر ارائه میکند.
◇ بخش سوم کنترلکننده (Controller):
بخش Controller وظیفه مدیریت تعاملات کاربر و ارتباط بین Model و View را بر عهده دارد. Controller درخواستهای کاربر را دریافت کرده و آنها را به Model ارسال میکند تا دادهها پردازش شوند. سپس، Controller دادههای پردازششده را به View ارسال کرده تا در رابط کاربری نمایش داده شوند.
🔻 بررسی معماری MVT
معماری Model View Template یا به اختصار MVT بهطور خاص در فریمورکهای Django طراحی شده است تا توسعهدهندگان را قادر سازد تا کدهای خود را به صورت منظم، خوانا و مقیاسپذیر سازماندهی کنند. این معماری مانند MVC از سه بخش اصلی تشکیل شده است که هرکدام وظایف خاصی را انجام میدهند. در این معماری بخش View همان بخش Controller در MVC و بخش Template تقریبا نقش View در MVC را دارد.
🔻 معماری MVT در هنگام استفاده از API
هنگام استفاده از API در جنگو، بخش Model همچنان مسئول مدیریت دادهها و منطق کسبوکار است. اما بخش View دیگر دادهها را به قالبهای HTML تبدیل نمیکند و بهجای آن، از Serializer برای ارسال دادهها به فرمتهای JSON یا XML استفاده میکند. بخش Template نیز دیگر وجود ندارد.
🔻 نتیجهگیری
معماری MVC (Model-View-Controller) یکی از الگوهای طراحی نرمافزاری معروف است که به تفکیک منطق کسبوکار، رابط کاربری و کنترل تعاملات کمک میکند.
🌐 منبع تکمیلی
🔖 #Python, #پایتون, #Django, #جنگو, #orm, #فریمورک
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
👍14❤3
🔶 بخش اول
🔶 مفاهیم شیگرائی
🔻 اصول SOLID
🔻 اصل تک مسئولیتی (SRP)
✖️ مشکل: کلاس زیر هم وظیفه مدیریت کاربر و هم ارسال ایمیل ایمیل را برعهده دارد:
✔️ راهحل: تفکیک وظايف:
🔻 اصل باز/بسته (OCP)
✖️ مشکل: کلاس زیر مسئول چندین نوع پرداخت است:
✔️ راهحل: جداسازی روشهای پرداخت:
🔻 اصل جایگزینی لیسکوف (LSP)
✖️ مشکل: فرض کنید کلاسی به نام Bird داریم که برای پرندهها طراحی شده است و دو زیرکلاس داریم: Sparrow (گنجشک) و Penguin (پنگوئن). در این مثال، متد fly() برای پنگوئن اشتباه است، زیرا پنگوئن نمیتواند پرواز کند.
✔️ راهحل: تفکیک رفتارها
🔻 اصل جداسازی اینترفیس (ISP)
✖️ مشکل: کلاس Printer مجبور است متد scan را پیادهسازی کند، حتی اگر این عملیات مورد نیاز نباشد.
✔️ راهحل: در اینجا رابطها جدا میشوند تا هر کلاس فقط متدهای مورد نیاز خود را پیادهسازی کند:
🔻 اصل وارونگی وابستگی (DIP)
🔖 #Python, #پایتون, #شئگرایی, #OOP, #SOLID
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
🔶 مفاهیم شیگرائی
🔻 اصول SOLID
اصول SOLID پنج قاعده مهم در طراحی و توسعه نرمافزار هستند که به نوشتن کدی تمیز، انعطافپذیر و قابل نگهداری کمک میکنند. این اصول ابتدا توسط Robert C. Martin (عمو باب) مطرح، و برای کاهش وابستگیها و افزایش قابلیت گسترش کد طراحی شدهاند.
🔻 اصل تک مسئولیتی (SRP)
براساس اصل Single Responsibility Principle، هر کلاس باید فقط یک مسئولیت داشته باشد و تنها یک دلیل برای تغییر آن وجود داشته باشد. برای مثال، یک کلاس نباید هم وظیفه مدیریت کاربران و هم ارسال ایمیل را برعهده داشته باشد.
✖️ مشکل: کلاس زیر هم وظیفه مدیریت کاربر و هم ارسال ایمیل ایمیل را برعهده دارد:
class UserManager:
def register_user(self, user_data):
pass
def send_email(self, email):
pass
✔️ راهحل: تفکیک وظايف:
class UserManager:
def register_user(self, user_data):
pass
class EmailService:
def send_email(self, email):
pass
🔻 اصل باز/بسته (OCP)
براساس اصل Open/Closed Principle، کلاسها باید برای گسترش باز و برای تغییر بسته باشند. برای مثال، اگر نیاز به اضافه کردن نوع جدیدی از گزارش دارید، به جای تغییر کلاس اصلی، از وراثت یا پلیمورفیسم استفاده کنید.
✖️ مشکل: کلاس زیر مسئول چندین نوع پرداخت است:
class PaymentProcessor:
def process_payment(self, payment_type):
if payment_type == "CreditCard":
pass
elif payment_type == "PayPal":
pass
✔️ راهحل: جداسازی روشهای پرداخت:
from abc import ABC, abstractmethod
class Payment(ABC):
@abstractmethod
def process(self):
pass
class CreditCardPayment(Payment):
def process(self):
pass
class PayPalPayment(Payment):
def process(self):
pass
🔻 اصل جایگزینی لیسکوف (LSP)
براساس اصل Liskov Substitution Principle، زیرکلاسها باید بتوانند بدون تغییر رفتار برنامه، جایگزین کلاسهای پدر شوند. برای مثال، یک مربع (Square) نباید بهعنوان زیرکلاس یک مستطیل (Rectangle) تعریف شود، اگر رفتارهای مستطیل را نقض کند.
✖️ مشکل: فرض کنید کلاسی به نام Bird داریم که برای پرندهها طراحی شده است و دو زیرکلاس داریم: Sparrow (گنجشک) و Penguin (پنگوئن). در این مثال، متد fly() برای پنگوئن اشتباه است، زیرا پنگوئن نمیتواند پرواز کند.
class Bird:
def fly(self):
pass
class Sparrow(Bird):
def fly(self):
pass
class Penguin(Bird):
def fly(self):
return NotImplemented
sparrow = Sparrow()
sparrow.fly() # Output: is ok
penguin = Penguin()
penguin.fly() # Output: Not Implemented
✔️ راهحل: تفکیک رفتارها
class Bird:
def lay_eggs(self):
pass
class FlyingBird(Bird):
def fly(self):
pass
class Sparrow(FlyingBird):
...
class Penguin(Bird):
def swim(self):
pass
🔻 اصل جداسازی اینترفیس (ISP)
براساس اصل Interface Segregation Principle، کلاسها نباید مجبور شوند متدهایی را پیادهسازی کنند که به آنها نیازی ندارند. برای مثال، اگر یک اینترفیس شامل متدهای کار و غذا خوردن باشد، یک ربات که نمیتواند غذا بخورد، نباید مجبور به پیادهسازی متد غذا خوردن شود.
✖️ مشکل: کلاس Printer مجبور است متد scan را پیادهسازی کند، حتی اگر این عملیات مورد نیاز نباشد.
class Machine:
def print(self):
pass
def scan(self):
pass
class Printer(Machine):
def print(self):
pass
def scan(self):
raise NotImplemented
✔️ راهحل: در اینجا رابطها جدا میشوند تا هر کلاس فقط متدهای مورد نیاز خود را پیادهسازی کند:
class Printer:
def print(self):
pass
class Scanner:
def scan(self):
pass
class PrinterDevice(Printer):
def print(self):
print("Printing...")
class SimpleScanner(Scanner):
def scan(self):
print("Scanning...")
🔻 اصل وارونگی وابستگی (DIP)
براساس اصل Dependency Inversion Principle، ماژولهای سطح بالا نباید به ماژولهای سطح پایین وابسته باشند. هر دو باید به انتزاعات وابسته باشند. برای مثال، یک کلاس نباید مستقیماً به دیتابیس خاصی وابسته باشد. به جای آن باید از اینترفیس یا انتزاعی برای ارتباط استفاده کند.
🔖 #Python, #پایتون, #شئگرایی, #OOP, #SOLID
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
👍14🔥4❤1
| کانال توسعهدهندگان پایتون |
🔹 انواع ارور ها در پایتون 🔸 بخش اول برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست. — SyntaxError یکی از خطا های رایج در پایتون این ارور هست. هنگامی این ارور اتفاق میافتد که شما نگارش و قانون نوشتاری…
🔹 انواع ارور ها در پایتون
🔸 بخش دوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— FileNotFoundError
اگر بخواهید عملیاتی روی یک file انجام دهید ممکن است به این ارور برخورد کنید.
این ارور هنگامی رخ میدهد که شما تلاش میکنید روی یک فایل عملیاتی انجام دهید اما به طور مثال فایل موردنظر وجود ندارد و یا آدرس درستی از فایل وارد نکردهاید.
برای رفع این رفع این ارور در وارد کردن نام، پسوند و آدرس فایل دقت کنید و حتما از وجود داشتن فایل مطمئن شوید.
مثال:
— ModuleNotFoundError
هنگامی که پایتون نتواند کتابخانه موردنظر را پیدا کند این خطا را برمیگرداند.
اگر کتابخانه مورد نظر روی سیستم یا محیط مجازی نصب نباشد و یا غلط املایی در نوشتن نام کتابخانه داشته باشید با این ارور مواجه خواهید شد.
مثال:
— IndexError
مطمعناً تابهحال وقتی خواستید به یک عنصر قابل شمارش ها دسترسی پیدا کنید به این ارور برخورد کردهاید.
اما دلیل رخ دادن این ارور چیست؟ زمانی این ارور رخ میدهد که اندیس مورد نظری که شما میخواهید آن را بگیرید در لیست یا رشته وجود نداشته باشد.
مانند زمانی که یک لیست 3 آیتم دارد اما شما در پی آیتم چهارم هستید.
مثال:
— KeyError
خطای key error خطایی رایج هست که احتمالا موقع کار با دیکشنری ها با اون برخورد کردید.
اگر تلاش کنید به یک مقدار توسط کلمه کلیدی آن دسترسی پیدا کنید اما آن کلمهکلیدی وجود نداشته باشد این خطا بروز داده میشود.
مثال:
— AttributeError
اگر تلاش کنید به یک متد یا صفت (attribute) از شئ دسترسی پیدا کنید اما شئ مورد نظر صفتی که میخواهید را نداشته باشد با این خطا مواجه خواهید شد.
مثال:
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش دوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— FileNotFoundError
اگر بخواهید عملیاتی روی یک file انجام دهید ممکن است به این ارور برخورد کنید.
این ارور هنگامی رخ میدهد که شما تلاش میکنید روی یک فایل عملیاتی انجام دهید اما به طور مثال فایل موردنظر وجود ندارد و یا آدرس درستی از فایل وارد نکردهاید.
برای رفع این رفع این ارور در وارد کردن نام، پسوند و آدرس فایل دقت کنید و حتما از وجود داشتن فایل مطمئن شوید.
مثال:
with open("test.txt", "r") as t:
t.read()
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
— ModuleNotFoundError
هنگامی که پایتون نتواند کتابخانه موردنظر را پیدا کند این خطا را برمیگرداند.
اگر کتابخانه مورد نظر روی سیستم یا محیط مجازی نصب نباشد و یا غلط املایی در نوشتن نام کتابخانه داشته باشید با این ارور مواجه خواهید شد.
مثال:
import requests
ModuleNotFoundError: No module named 'requests'
— IndexError
مطمعناً تابهحال وقتی خواستید به یک عنصر قابل شمارش ها دسترسی پیدا کنید به این ارور برخورد کردهاید.
اما دلیل رخ دادن این ارور چیست؟ زمانی این ارور رخ میدهد که اندیس مورد نظری که شما میخواهید آن را بگیرید در لیست یا رشته وجود نداشته باشد.
مانند زمانی که یک لیست 3 آیتم دارد اما شما در پی آیتم چهارم هستید.
مثال:
names = ["Yasin", "Reza", "Navid"]
print(names[5])
IndexError: list index out of range
— KeyError
خطای key error خطایی رایج هست که احتمالا موقع کار با دیکشنری ها با اون برخورد کردید.
اگر تلاش کنید به یک مقدار توسط کلمه کلیدی آن دسترسی پیدا کنید اما آن کلمهکلیدی وجود نداشته باشد این خطا بروز داده میشود.
مثال:
names = {'Yasin': '1', 'Reza': '2'}
print(names['3'])
KeyError: '3'
— AttributeError
اگر تلاش کنید به یک متد یا صفت (attribute) از شئ دسترسی پیدا کنید اما شئ مورد نظر صفتی که میخواهید را نداشته باشد با این خطا مواجه خواهید شد.
مثال:
numbers = [1, 2, 3]
print(numbers.sum())
AttributeError: 'list' object has no attribute 'sum'
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
👍5❤4👎1
🔹 انواع ارور ها در پایتون
🔸 بخش سوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— UnboundLocalError
این ارور زمانی میتونه رخ بده که متغیر شما bound نشده یا اصطلاحا unbound هستش.
مثلا زمانی که در حال shadow زدن به یک متغیر global هستید.
یا اینکه از متغیر سطح local در متد یا تابع ای دیگر استفاده میکنید.
— UnicodeError
هنگامی که پایتون با مشکلات رمزگذاری یا رمزگشایی unicode مواجه میشود این ارور رخ میدهد.
از سری دلایل رخ دادن این ارور:
— استفاده از روش های رمزگذاری که پشتیبانی نمیشوند
— توالی بایت های خراب یا ناقص
مثال:
— ZeroDivisionError
وقتی بخواهیم عددی را بر صفر تقسیم کنیم پایتون این را نمایش میدهد.
مثال:
— MemoryError
اگر زمانی حافظه رم سیستم پر شود یا به اصطلاح تمام رم در حال استفاده باشد به این ارور برمیخورید.
در اکثر اوقات به این دلیل است که رم بدون آزاد شدن و به صورت مداوم درحال استفاده است.
برای مثال این کد سعی میکنه یک لیست با بیش از یک میلیارد عنصر درست کنه:
— PermissionError
ارور دسترسی برای زمانی است که پایتون دسترسی لازم برای عملیات مورد نظر رو ندارد، مثل ساخت فایل یا حذف فایل.
این ارور همچنین میتواند در صورتی رخ دهد که یک فایل مورد استفاده پراسس دیگری باشد.
برای مثال این تکه کد سعی میکند یک فولدر در system32 در ویندوز بسازد که در حالت عادی و بدون داشتن دسترسی administrator ممکن نیست.
✅ اینها ارور های رایج پایتونی بودند و از حالا به بعد به سراغ نحوه هندل کردن این ارور ها میریم.
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش سوم
برای رفع و هندل کردن ارور ها ابتدا ما باید آنها رو به خوبی بشناسیم و بدونیم دلایل رخ دادن آنها چیست.
— UnboundLocalError
این ارور زمانی میتونه رخ بده که متغیر شما bound نشده یا اصطلاحا unbound هستش.
مثلا زمانی که در حال shadow زدن به یک متغیر global هستید.
یا اینکه از متغیر سطح local در متد یا تابع ای دیگر استفاده میکنید.
name = "Yasin"
def get_name():
print(name)
name = "ali"
print(name)
get_name()
UnboundLocalError: cannot access local variable 'name' where it is not associated with a value
— UnicodeError
هنگامی که پایتون با مشکلات رمزگذاری یا رمزگشایی unicode مواجه میشود این ارور رخ میدهد.
از سری دلایل رخ دادن این ارور:
— استفاده از روش های رمزگذاری که پشتیبانی نمیشوند
— توالی بایت های خراب یا ناقص
مثال:
unicode_str = b"\u1234\u5678\u90AB"
print(decoded_str.decode("ascii"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 0: ordinal not in range(128)
— ZeroDivisionError
وقتی بخواهیم عددی را بر صفر تقسیم کنیم پایتون این را نمایش میدهد.
مثال:
result = 5 / 0
ZeroDivisionError: division by zero
— MemoryError
اگر زمانی حافظه رم سیستم پر شود یا به اصطلاح تمام رم در حال استفاده باشد به این ارور برمیخورید.
در اکثر اوقات به این دلیل است که رم بدون آزاد شدن و به صورت مداوم درحال استفاده است.
برای مثال این کد سعی میکنه یک لیست با بیش از یک میلیارد عنصر درست کنه:
large_list = [0] * 1_000_000_000
— PermissionError
ارور دسترسی برای زمانی است که پایتون دسترسی لازم برای عملیات مورد نظر رو ندارد، مثل ساخت فایل یا حذف فایل.
این ارور همچنین میتواند در صورتی رخ دهد که یک فایل مورد استفاده پراسس دیگری باشد.
برای مثال این تکه کد سعی میکند یک فولدر در system32 در ویندوز بسازد که در حالت عادی و بدون داشتن دسترسی administrator ممکن نیست.
import os
os.mkdir(r"C:\Windows\System32\new_directory")
✅ اینها ارور های رایج پایتونی بودند و از حالا به بعد به سراغ نحوه هندل کردن این ارور ها میریم.
منبع:
betterstack 〽️
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
👍17❤4
🔶 جنگو
🔶 بخش سوم
🔶 راهاندازی محیط توسعه
🔻 بررسی محیط مجازی (virtual environment)
🔻 راهاندازی محیط مجازی
○ استفاده از ماژول venv:
○ استفاده uv:
🔻 نصب جنگو
🔖 #Python, #پایتون
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
🔶 بخش سوم
🔶 راهاندازی محیط توسعه
🔻 بررسی محیط مجازی (virtual environment)
احتمالا با محیط مجازی در پایتون آشنا هستید و ازش استفاده کردید. محیط مجازی یک ابزاری است که به شما این امکان را میدهد تا یک محیط ایزوله برای پروژههای خود ایجاد کنید. این ایزولهسازی به شما کمک میکند تا کتابخانهها و وابستگیهای هر پروژه را جداگانه مدیریت کنید، بدون اینکه با سایر پروژهها یا سیستم اصلی تداخل داشته باشند. هر پروژه میتواند نسخههای متفاوتی از یک کتابخانه را داشته باشد. وابستگیها و تغییرات یک پروژه بر پروژههای دیگر تأثیری ندارند. محیط مجازی به شما کمک میکند تا وابستگیها را به راحتی مدیریت کنید و آنها را در فایل requirements.txt ذخیره کنید. روشهای متفاوتی برای ایجاد یک محیط ایزوله وجود دارد که در ادامه با دو روش متفاوت محیط مجازی پروژه را ایجاد میکنیم و سپس به نصب جنگو و ایجاد اولین پروژه جنگو میپردازیم.
🔻 راهاندازی محیط مجازی
○ استفاده از ماژول venv:
ماژول venv یکی از ابزارهای داخلی پایتون است که از نسخه 3.3 به بعد ارائه شده و برای ایجاد محیطهای مجازی استفاده میشود. این ماژول به شما امکان میدهد محیطی ایزوله برای پروژههای خود ایجاد کنید، تا کتابخانهها و وابستگیهای هر پروژه بهطور مستقل مدیریت شوند.
دستور زیر، دسترسی به این ماژول را فراهم می کند و بعد از اجرای این دستور یک فولدر تحت عنوان env (پارامتر آخر اسم فولدر را مشخص میکند) ایجاد می شود.
# Linux
python3 -m venv env
# Windows
python -m venv env
بعد از ایجاد محیط مجازی باید آن را فعال کنید.
# Windows
venv\Scripts\activate
# Linx
source venv/bin/activate
○ استفاده uv:
ابزار uv یک ابزار بسیار سریع برای مدیریت بستهها و پروژههای پایتون است که با زبان Rust توسعه یافته است. این ابزار به عنوان جایگزینی برای ابزارهایی مانند pip، pip-tools، pipx، poetry، pyenv، twine و virtualenv طراحی شده و امکانات گستردهای را برای مدیریت وابستگیها، محیطهای مجازی، نسخههای پایتون و اجرای اسکریپتها فراهم میکند. برای استفاده ابتدا باید uv را نصب کنید.
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
در ادامه برای ایجاد محیط مجازی تنها با وارد کردن uv و در ادامه venv محیط مجازی ایجاد می شود.
uv venv
🔻 نصب جنگو
مراحل نصب جنگو نسبتا پروسه راحتی است و صرفا باید فریمورک جنگو را با استفادهِ یکی از روش زیر با توجه به مراحل قبل نصب کنید.
# venv
pip install django
# uv
uv add django
در ادامه باید پروژه جنگویی خود را ایجاد کنیم بعد از اجرا دستور زیر یک سری دایرکتوری و فایل براساس چارچوب جنگو با توجه به پست های قبلی که راجب این مورد به صورت کامل صحبت کردیم ایجاد میکند. بعد از ایجاد دایرکتوری با استفاده از دستور cd وارد دایرکتوری شوید.
# Venv
django-admin startproject project_name
# UV
uv run django-admin startproject project_name
# Change Directly (both Windows & Linux)
cd project_name
در نهایت برای اجرا پروژه با استفاده از دستور زیر میتوانید پروژه جنگو را روی آدرس لوکال اجرا کنید.
# Venv
python manage.py runserver
# UV
uv run manage.py runserver
🔖 #Python, #پایتون
👤 ȺʍìɾⱮօհąʍʍąժ
💎 Channel: @DevelopixPython
👍10🔥4
🔹 ارور ها در پایتون
🔸 بخش اول
💠 در پست های قبلی - انواع ارور ها، بخش اول، بخش دوم، بخش سوم - با ارور هایی که در پایتون ممکنه باهاشون برخورد کنیم آشنا شدیم.
💠 حالا وقت اینه که از این مطالب استفاده کنیم تا برنامه های خودمون رو بهبود بدیم.
همونطور که مطلع هستید، مفسر زمانی که به ارور برخورد میکنه برنامه رو متوقف میکنه و process اجرایی ما از کار میوفته.
قطعا این یک معضل برای برنامهنویس هاست، اما پایتون هم مثل خیلی از زبان های دیگه برای این مشکل راهحلی ارائه داده.
این زبان با دو کلمه کلیدی
ابتدا در بلوک
بریم چند تا مثال بزنیم تا با این ساختار بیشتر آشنا بشیم.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی را دریافت کند و یکی کمتر از آن عدد را چاپ کند و در آخر هم یک bye در پایان برنامه print کند.
روش یک - بدون استفاده از try except:
این کد تا زمانی صحیح و بدون مشکل کار میکنه که کاربر همیشه به عنوان ورودی یک عدد صحیح وارد کنه.
حالا اگر کاربر از کارکتری استفاده کنه که کلاس int انتظارش رو نداره، برنامه با ارور مواجه میشه و برنامه متوقف میشه. پس ما bye رو در خروجی نمیبینم:
روش دوم - با استفاده از try except:
اما اینجا به محض مواجهه با ارور، برنامه پیام مناسبی به کاربر نشون میده و به کارش ادامه میده، بدون اینکه process رو متوقف کنه.
همچنین میتونید صرفا یک یا چند خطای مورد انتظار و معین رو برای تکه کد خودتون درنظر بگیرید. به این صورت که در بلوک except نوع ارور رو مینویسید و مفسر صرفا نسبت به این ارور(ها) واکنش نشون میده.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی صحیح را دریافت کند و حاصل تقسیم 1000 بر آن را بنویسد.
جواب:
در این تکه کد فقط اگر به
حالا اگه بخوایم
تا اینجا با
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش اول
💠 در پست های قبلی - انواع ارور ها، بخش اول، بخش دوم، بخش سوم - با ارور هایی که در پایتون ممکنه باهاشون برخورد کنیم آشنا شدیم.
💠 حالا وقت اینه که از این مطالب استفاده کنیم تا برنامه های خودمون رو بهبود بدیم.
همونطور که مطلع هستید، مفسر زمانی که به ارور برخورد میکنه برنامه رو متوقف میکنه و process اجرایی ما از کار میوفته.
قطعا این یک معضل برای برنامهنویس هاست، اما پایتون هم مثل خیلی از زبان های دیگه برای این مشکل راهحلی ارائه داده.
این زبان با دو کلمه کلیدی
try
و except
ساختاری رو برای ما فراهم کرده که بتونیم ارور ها رو مدیریت یا هندل کنیم.ابتدا در بلوک
try
تکه خط کدی رو که ممکنه به خطا بخوره رو مینویسیم و در بلوک هم except
تکه کدی رو که میخوایم در صورت مواجه شدن به ارور اجرا بشه رو مینویسیم.بریم چند تا مثال بزنیم تا با این ساختار بیشتر آشنا بشیم.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی را دریافت کند و یکی کمتر از آن عدد را چاپ کند و در آخر هم یک bye در پایان برنامه print کند.
روش یک - بدون استفاده از try except:
number = int(input("enter a number: ")
print(number - 1)
print("bye")
این کد تا زمانی صحیح و بدون مشکل کار میکنه که کاربر همیشه به عنوان ورودی یک عدد صحیح وارد کنه.
حالا اگر کاربر از کارکتری استفاده کنه که کلاس int انتظارش رو نداره، برنامه با ارور مواجه میشه و برنامه متوقف میشه. پس ما bye رو در خروجی نمیبینم:
ValueError: invalid literal for int() with base 10
روش دوم - با استفاده از try except:
try:
number = int(input("enter a number: "))
except:
print("the entry isn't an integer")
print("bye")
اما اینجا به محض مواجهه با ارور، برنامه پیام مناسبی به کاربر نشون میده و به کارش ادامه میده، بدون اینکه process رو متوقف کنه.
همچنین میتونید صرفا یک یا چند خطای مورد انتظار و معین رو برای تکه کد خودتون درنظر بگیرید. به این صورت که در بلوک except نوع ارور رو مینویسید و مفسر صرفا نسبت به این ارور(ها) واکنش نشون میده.
❔ مسئله:
— برنامه ای بنویسید که از کاربر عددی صحیح را دریافت کند و حاصل تقسیم 1000 بر آن را بنویسد.
جواب:
try:
number = int(input("enter a number: "))
print(1e3 / number)
except ValueError:
print("the entry isn't an integer")
در این تکه کد فقط اگر به
ValueError
برخورد کنیم برنامه واکنشنشون میده و درغیر اینصورت برنامه با ارور مواجه، و در نتیجه متوقف میشه.حالا اگه بخوایم
ZeroDivisionError
رو هم هندل کنیم چی؟ کاری نداره، اونم اضافه میکنیم:try:
number = int(input("enter a number: "))
print(1e3 / number)
except ValueError:
print("the entry isn't an integer")
except ZeroDivisionError:
print("entry cannot be zero")
تا اینجا با
try
و except
آشنا شدیم. در پست های بعدی بیشتر در مورد error handling صحبت میکنیم و با این موضوع بیشتر آشنا میشیم.🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
👍9❤4🔥3
🔹 ارور ها در پایتون
🔸 بخش دوم (بخش اول)
💠 در پست قبلی تا اونجا پیش رفتیم که برای هر خطا هندلر جداگانه قرار بدیم. در این پست هم همین مطلب رو ادامه میدیم.
💠 پایتون هنگامی که ما از except استفاده میکنم همیشه ارور مورد نظر رو برای ما نگه میداره و ما میتونیم از همون ارور هم استفاده کنیم که بدونیم برنامه چرا به مشکل خورده. برای اینکار باید از یک متغیر استفاده کنیم تا خطا رو در اون نگه داری کنیم.
شیوه استفاده به این شکله:
در پایتون شما میتونید بعد از بلوک try-except از کلمه کلیدی else استفاده کنید. در این ساختار else زمانی اجرا میشه که کد ما بدون مشکل اجرا بشه و کار به اجرای code block هیچ کدوم از except ها کشیده نشه.
به عبارت دیگه اگه بلوک try اجرا بشه بعدش مستقیم میره بلوک else اما اگه بلوک except اجرا بشه دیگه else در کار نیست.
با این مثال بهتر این مفهوم رو متوجه میشین:
هنگامی که یک عدد رو به get_number بدیم و به ارور نخوریم وارد بلوک else میشیم و به شما پیام "thank you for number x" نشون داده میشه.
حالا اگه یک حرف وارد کنید به شما پیام "please enter a number" نشون داده میشه.
یک کلمه کلیدی دیگه پایتون برای try, except داره که finally نام داره.
کد بلوک finally همیشه اجرا میشه، چه کد ما دارای ارور باشه و به exception بره و چه بلوک try به درستی اجرا بشه، در هر صورت finally اجرا میشه.
راستی، شما میتونید بعد از بلوک try از finally استفاده کنید و exceptionای قرار ندید، تست این قسمت با شما😁
منبع
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
🔸 بخش دوم (بخش اول)
💠 در پست قبلی تا اونجا پیش رفتیم که برای هر خطا هندلر جداگانه قرار بدیم. در این پست هم همین مطلب رو ادامه میدیم.
💠 پایتون هنگامی که ما از except استفاده میکنم همیشه ارور مورد نظر رو برای ما نگه میداره و ما میتونیم از همون ارور هم استفاده کنیم که بدونیم برنامه چرا به مشکل خورده. برای اینکار باید از یک متغیر استفاده کنیم تا خطا رو در اون نگه داری کنیم.
شیوه استفاده به این شکله:
def divide(x, y):
try:
result = x // y
print("Yeah! Your answer is :", result)
except Exception as e:
print("The error is: ", e)
divide(3,0)
در پایتون شما میتونید بعد از بلوک try-except از کلمه کلیدی else استفاده کنید. در این ساختار else زمانی اجرا میشه که کد ما بدون مشکل اجرا بشه و کار به اجرای code block هیچ کدوم از except ها کشیده نشه.
به عبارت دیگه اگه بلوک try اجرا بشه بعدش مستقیم میره بلوک else اما اگه بلوک except اجرا بشه دیگه else در کار نیست.
با این مثال بهتر این مفهوم رو متوجه میشین:
def get_number():
try:
number = int(input("number: "))
except:
print("please enter a number")
else:
print(f"thank you for number {number}")
هنگامی که یک عدد رو به get_number بدیم و به ارور نخوریم وارد بلوک else میشیم و به شما پیام "thank you for number x" نشون داده میشه.
حالا اگه یک حرف وارد کنید به شما پیام "please enter a number" نشون داده میشه.
یک کلمه کلیدی دیگه پایتون برای try, except داره که finally نام داره.
کد بلوک finally همیشه اجرا میشه، چه کد ما دارای ارور باشه و به exception بره و چه بلوک try به درستی اجرا بشه، در هر صورت finally اجرا میشه.
def get_number():
try:
number = int(input("number: "))
except:
print("please enter a number")
finally:
print("thank you for reading this post")
راستی، شما میتونید بعد از بلوک try از finally استفاده کنید و exceptionای قرار ندید، تست این قسمت با شما😁
منبع
🔖 #Python, #پایتون
👤 Yasin
💎 Channel: @DevelopixPython
❤13👍1👎1
🔵نکات برنامهنویسی پایتون
⚪️ بخش اول
💠 از کدوم مورد استفاده میکنین برای اینکه بفهمین یک متغییر None هست یا نه؟
❗️ هیچوقت از روش دوم استفاده نکنین
به چند دلیل:
- استفاده از is بهینه تره و مستقیم ادرس مموری رو بررسی میکنه و از چیزای اضافی پرهیز میکنه
- استفاده از == برای این مورد کاملا خطرناکه و ممکنه باعث ایجاد ارور بشه. چرا؟ کد رو ببینید:
🔖 #Python, #پایتون
👤 REZA P
💎 Channel: @DevelopixPython
⚪️ بخش اول
💠 از کدوم مورد استفاده میکنین برای اینکه بفهمین یک متغییر None هست یا نه؟
1) obj is None
2) obj == None
❗️ هیچوقت از روش دوم استفاده نکنین
به چند دلیل:
- استفاده از is بهینه تره و مستقیم ادرس مموری رو بررسی میکنه و از چیزای اضافی پرهیز میکنه
- استفاده از == برای این مورد کاملا خطرناکه و ممکنه باعث ایجاد ارور بشه. چرا؟ کد رو ببینید:
class Example:
def __eq__(self, _):
return True
e = Example()
print(e == None)
print(e is None)
🔖 #Python, #پایتون
👤 REZA P
💎 Channel: @DevelopixPython
🔥11👎7👍5❤2
💠 توابع
مفهوم تابع چیه؟ تابع یک مفهوم کلی و بنیادیه که در زمینههای مختلفی مثل ریاضیات، برنامهنویسی و حتی زندگی روزمره کاربرد داره. تعریف سادهای که میتونیم برای تابع بگیم به این شکله:
مثال:
فرض کنید دستگاه کالباسساز دارید. این دستگاه گوشت رو به عنوان ورودی دریافت میکنه و کالباس رو به عنوان خروجی تولید میکنه. پس این دستگاه یک تابعه که ورودی (گوشت) رو میگیره و خروجی (کالباس) تحویل میده.
پس دستگاه ما یک تابع به شمار میره.
خب حالا که مفهوم تابع رو فهمیدیم بریم یک سوال دیگه رو جواب بدیم:
چرا باید از توابع استفاده کنیم؟
— دستهبندی و سازماندهی کدها: تابعها به ما کمک میکنن کد هامون مرتب و قابل مدیریت باشن.
— قابلیت استفاده مجدد: با نوشتن یک تابع، میتونیم اون رو در بخشهای مختلف برنامه بارها و بارها استفاده کنیم.
— کاهش طول کد: تابعها کمک میکنند کد ما کوتاهتر و خواناتر باشن.
— افزایش خوانایی و نگهداری کد: کدهایی که از تابع استفاده میکنن، قابل فهمتر و آسونتر برای تغییر و توسعه هستن.
برنامهنویسی بدون تابع ممکنه؟ شاید نه. تابعها به ما امکان میدن که هر زمان خواستیم یه قطعه کد رو اجرا کنیم، بدون اینکه نیاز باشه اون رو دوباره بنویسیم. اگر کدی بیرون از تابع باشه، به صورت خط به خط اجرا میشه و درکل کنترل کمتری روی اون داریم.
حالا که مفهوم تابع رو فهمیدیم، وقتش رسیده که یاد بگیریم که چطور یک تابع پایتونی بنویسیم.
سینتکس ساخت تابع در پایتون به این صورته:
—
—
—
آیا تابع میتونه ورودی (آرگومان) نداشته باشه؟ بله. تابع میتونه یک دستورالعمل خاص رو بدون داشتن ورودی انجام بده.
داخل تابع با استفاده از ایندنت (indent) کدهایی که قراره اجرا بشن رو مینویسیم. حالا تابع ما آمادهست تا ورودی دریافت کنه و پردازش رو انجام بده.
بعد از پردازش کار توی تابع، معمولاً نیاز داریم که نتیجه یا خروجی رو از تابع بگیریم. برای این کار از کلمه کلیدی return استفاده میکنیم:
— مقداری (یا مقدار هایی) که جلوی کلمه return قرار میدیم، از تابع خارج میشه و میتونه هر چیزی باشه، مثل عدد، رشته، لیست، متغیر، یا حتی یه تابع دیگه!
— اگر هیچ مقداری رو با return از تابع خارج نکنیم، به صورت پیشفرض مقدار None از تابع خارج میشه. این یعنی تمام تابعها خروجی دارن، حتی اگر چیزی مشخص نکرده باشیم.
آیا با تعریف کردن تابع، کارمون تموم میشه؟ خیر! باید تابع رو صدا بزنیم تا اجرا بشه.
سینتکس صدا زدن تابع به این صورته:
— در اینجا، اسم تابع رو مینویسیم و مقادیر ورودی (پارامترها) رو به اون میدیم.
— وقتی تابع اجرا بشه، خروجی هم تولید میشه. اما اگر بخوایم خروجی رو ذخیره کنیم، باید اون رو به یه متغیر اختصاص بدیم:
به ای صورت تابعی رو تعریف میکنیم و ازش استفاده میکنیم.
🔖 #Python, #پایتون, #تابع, #function
👤 Yasin
💎 Channel: @DevelopixPython
مفهوم تابع چیه؟ تابع یک مفهوم کلی و بنیادیه که در زمینههای مختلفی مثل ریاضیات، برنامهنویسی و حتی زندگی روزمره کاربرد داره. تعریف سادهای که میتونیم برای تابع بگیم به این شکله:
تابع ماشینی هست که ورودی میگیره و تبدیل میکنه به خروجی. یعنی ماشین تبدیل کننده ورودی به خروجی.
مثال:
فرض کنید دستگاه کالباسساز دارید. این دستگاه گوشت رو به عنوان ورودی دریافت میکنه و کالباس رو به عنوان خروجی تولید میکنه. پس این دستگاه یک تابعه که ورودی (گوشت) رو میگیره و خروجی (کالباس) تحویل میده.
پس دستگاه ما یک تابع به شمار میره.
خب حالا که مفهوم تابع رو فهمیدیم بریم یک سوال دیگه رو جواب بدیم:
چرا باید از توابع استفاده کنیم؟
— دستهبندی و سازماندهی کدها: تابعها به ما کمک میکنن کد هامون مرتب و قابل مدیریت باشن.
— قابلیت استفاده مجدد: با نوشتن یک تابع، میتونیم اون رو در بخشهای مختلف برنامه بارها و بارها استفاده کنیم.
— کاهش طول کد: تابعها کمک میکنند کد ما کوتاهتر و خواناتر باشن.
— افزایش خوانایی و نگهداری کد: کدهایی که از تابع استفاده میکنن، قابل فهمتر و آسونتر برای تغییر و توسعه هستن.
برنامهنویسی بدون تابع ممکنه؟ شاید نه. تابعها به ما امکان میدن که هر زمان خواستیم یه قطعه کد رو اجرا کنیم، بدون اینکه نیاز باشه اون رو دوباره بنویسیم. اگر کدی بیرون از تابع باشه، به صورت خط به خط اجرا میشه و درکل کنترل کمتری روی اون داریم.
حالا که مفهوم تابع رو فهمیدیم، وقتش رسیده که یاد بگیریم که چطور یک تابع پایتونی بنویسیم.
سینتکس ساخت تابع در پایتون به این صورته:
def function_name(param1, param2, ...):
...
—
def
: این کلمه کلیدی مخفف "define" هست و برای تعریف یک تابع استفاده میشه.—
function_name
: نامی که برای تابع انتخاب میکنیم. این نام بهتره حالت توصیفی داشته باشه و نشوندهنده این باشه که تابع چه کاری انجام میده.—
parameter
: ورودیهایی که تابع قراره دریافت کنه. این ورودیها داخل پرانتز مشخص میشن و به اونها پارامتر (آرگومان) میگیم.آیا تابع میتونه ورودی (آرگومان) نداشته باشه؟ بله. تابع میتونه یک دستورالعمل خاص رو بدون داشتن ورودی انجام بده.
داخل تابع با استفاده از ایندنت (indent) کدهایی که قراره اجرا بشن رو مینویسیم. حالا تابع ما آمادهست تا ورودی دریافت کنه و پردازش رو انجام بده.
بعد از پردازش کار توی تابع، معمولاً نیاز داریم که نتیجه یا خروجی رو از تابع بگیریم. برای این کار از کلمه کلیدی return استفاده میکنیم:
return value
— مقداری (یا مقدار هایی) که جلوی کلمه return قرار میدیم، از تابع خارج میشه و میتونه هر چیزی باشه، مثل عدد، رشته، لیست، متغیر، یا حتی یه تابع دیگه!
— اگر هیچ مقداری رو با return از تابع خارج نکنیم، به صورت پیشفرض مقدار None از تابع خارج میشه. این یعنی تمام تابعها خروجی دارن، حتی اگر چیزی مشخص نکرده باشیم.
آیا با تعریف کردن تابع، کارمون تموم میشه؟ خیر! باید تابع رو صدا بزنیم تا اجرا بشه.
سینتکس صدا زدن تابع به این صورته:
function_name(value1, value2, ...)
— در اینجا، اسم تابع رو مینویسیم و مقادیر ورودی (پارامترها) رو به اون میدیم.
— وقتی تابع اجرا بشه، خروجی هم تولید میشه. اما اگر بخوایم خروجی رو ذخیره کنیم، باید اون رو به یه متغیر اختصاص بدیم:
result = function_name(value1, value2, ...)
به ای صورت تابعی رو تعریف میکنیم و ازش استفاده میکنیم.
🔖 #Python, #پایتون, #تابع, #function
👤 Yasin
💎 Channel: @DevelopixPython
❤7👍7🔥1