| کانال توسعه‌دهندگان پایتون |
6.59K subscribers
38 photos
2 videos
4 files
43 links
⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
🔹 Assertions in Python

🔺 یکی از موارد کاربردی در پایتون 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
👍161🔥1
📊 کار با داده های آماری در پایتون

توی این پست میخوایم ببینیم چجوری باید با داده های آماری داخل پایتون کار کرد. تو پایتون یه ماژول داخلی وجود داره به اسم 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
👍243🔥1