🔹 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