پایتون | python | برنامه‌نویسی | comma.code
2.61K subscribers
18 photos
47 videos
7 files
57 links
به ⭐️کانال پایتونِ ما⭐️ خوش اومدی؛ جایی که کدها زنده میشن و ایدهها به واقعیت تبدیل میشدن! 🚀 چه تازهکار باشی و چه حرفه ای، اینجا کلی چیز منتظرته

حرفی سخنی انتقادی: @ir_379
Download Telegram
سلام
داشتم یه نکته ای رو در جایی میخوندم که دیدم جالبه و خواستم بگم. این نکته بهتون کمک میکنه در اکثر مواقع حجم استفاده برنامه شما از حافظه در چیزی حدود ۶۰ درصد کمتر بشه.

شما میدونید که وقتی دارید یک کلاس می‌سازید هر شی یه دیکشنری __dict__ داره که ویژگی ها و مقادیر اون ویژگی ها رو نگهداری میکنه. باید بدونید این دیکشنری برای ساده ترین اشیا سربار حافظه قابل توجهی تولید میکنه .
نمونه این چنین کلاس ها:
class N_user:
def __init__(self,name,age,loc):
self.name=name
self.age=age
self.loc=loc

در مقابل ما میتونم با __slots__ پیشاپیش ویژگی ها رو اعلام کنیم تا برای هر شی یک ساختار آرایه ای در نظر گرفته بشه که فقط فضا برای نگهداری ویژگی هایی که تعریف کردیم رو داشته باشه.این کار باعث میشه سربار حافظه مربوط به دیکشنری کامل حذف بشه
نمونه چنین کلاسی:
class S_user:
__slots__=["name","age","loc"]
def __init__(self,name,age,loc):
self.name=name
self.age=age
self.loc=loc

🔰تفاوت ها:

روش اول و حالت عادی
در این حالت نمونه ما کاملا پویا هستش و میتونیم ویژگی هایی بهش اضافه کنیم ولی حافظه بیشتری اشغال میکنه و همینطور جستجو کردن هم در ین مورد کندتر هستش

روش دوم و استفاده از slots
در این حالت نمونه ما پویا نیست و نمیشه بهش ویژگی اضافه کرد ولی از حافظه کمتری استفاده میکنه و همینطور سرعت جستجو بالاتر هستش. باید اضافه کنیم اگر ارث بری اتفاق افتاد و نیاز بود که کلاس فرزند ویژگی جدید داشته باشه باید slots خودش رو تعریف کنه همچنین در این حالت اگر به قابلیت های خاص مثل dict یا weakref نیاز دارید میتونید اونها رو به slots اضافه کنید.

نکته: تفاوت حجم استفاده از حافظه در ساخت نمونه در تعداد پایین زیاد نیست و در این حالت پیشنهاد نمیکنم که از slots استفاده کنید ولی در ساخت تعداد نمونه زیاد برای مثال ۱۰۰۰۰ عددی این تفاوت کاملا حس میشه.

📊حالا بریم با یه اسکریپت تفاوت میزان فضای اشغالی این دو حالت رو در تعداد 100,000 عدد نمونه برسی کنیم.
from sys import getsizeof as size

class N_user:
def __init__(self,name,age,loc):
self.name=name
self.age=age
self.loc=loc
def age_up(self):
self.age+=1


class S_user:
__slots__=["name","age","loc"]
def __init__(self,name,age,loc):
self.name=name
self.age=age
self.loc=loc
def age_up(self):
self.age+=1

range=range(100000)
N_users=[N_user("name",10,(10,10)) for _ in range]
S_users=[S_user("name",10,(10,10)) for _ in range]

n_memory=sum(size(i)+size(i.__dict__) for i in N_users)
s_memory=sum(size(i) for i in S_users)

print(f"n_users= {n_memory/1024/1024} MB")
print(f"s_users= {s_memory/1024/1024} MB")
print(f"frugality= {(1 - s_memory / n_memory) * 100:.1f}%")



امیدوارم براتون مفیده بوده باشه🙏😘

نظرات خودتون رو حتما کامنت کنید👌📝


#python #programing #memory_optimization #programming_tips #comma_code #comma_code_python
#پایتون #برنامه_نویسی #حافظه #بهینه_سازی #نکته #کاما_کد

📱 کانال تلگرام
📱 پیج اینستاگرام
📱 چنل یوتیوب

🔤🔤🔤🔤🔤 🔤🔤🔤🔤
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍32
📝 یه توضیح راجب مدیریت خطا در پایتون

شما در پایتون میتونید خطا های برنامه رو به کمک چندین کلمه کلیدی و بلوک کد کنترل کنید. برای راحتی توضیحات از یک مثال استفاده می‌کنیم و مدیریت خطا رو بر روی این مثال انجام میدیم .


مثال : ساخت فانکشنی که حاصل تقسیم دو ورودی را نمایش بدهد و اگر خطایی رخ داد بدون خاتمه یافتن برنامه خطا را به شکل فارسی برگرداند.

😀 مرحله اول try :
ما در مرحله اول باید بلوک try رو بسازیم. در این بلوک کدهایی که میتونن موجب خطا بشن رو قرار میدیم در اینصورت اگر در اجرای این کد ها خطایی پیش اومد برنامه خطا رو به بلوک های بعدی میده تا بتونیم کنترل کنیم. دستورات ما تا اینجا به این شکل میشه:

def division(a,b):
# step1
try:
result=a/b

2️⃣ مرحله دوم except :
حالا ما باید مشخص کنیم که در صورت بروز خطا باید چکار انجام بشه که اینکار توسط بلوک except انجام میشه.
همینطور ما میتونیم رفتار رو به نسبت نوع خطا هم انجام بدیم و اگر در بلوک مد نظر نوع خطا مشخص نکنیم بلوک با به وجود اومدن هر نوع خطایی اجرا میشه.

def division(a,b):
# step1
try:
result=a/b
# step2
except ZeroDivisionError:
result = "نمیتوان بر صفر تقسیم کرد"
except TypeError:
result = "این دو نوع دیتا را نمیتوان بر یکدیگر تقسیم کرد"
except:
result="خطای ناشناخته"

باید اضافه کنم که:
ما میتونیم به این شکل هم به خود آبجکت خطا هم دسترسی داشته باشیم و ازش استفاده کنیم.

except Exception as e:
'''
Exception = نوع خطا
که در این حالت تمامی خطاها در نظر گرفته میشه. شما میتونید بجای این کلمه از TypeError یا ZeroDivisionError یا هر نوع خطا دیگه استفاده کنید.
e = آبجکت خطا
این کلمه که دلبخواه هستش به آبجکت خطا اشاره می‌کنه و شما میتونید به کمکش به موارد مختلف خطا دست پیدا کنید برای مثال
type(e).__name__
'''

3️⃣ مرحله سوم (اختیاری) else :
در این مرحله می‌توان با بلوک else در صورت رخ ندادن هیچ یک از except ها کنترل بیشتری رو داشته باشیم و چون در این مثال نیازی به این بلوک نیست ما می‌سازیمش ولی داخلش رو خالی میزاریم


4️⃣ مرحله چهارم (اختیاری) finally :
بلوک finally در هر صورت اجرا میشن.


🤔و در نهایت برنامه ما به این شکل در میاد
def division(a,b):
# step1
try:
result=a/b
# step 2
except ZeroDivisionError :
result = "نمیتوان بر صفر تقسیم کرد"
except TypeError as e:
result =f"{type(e).__name__} :این دو نوع دیتا را نمیتوان بر یکدیگر تقسیم کرد"
except :
result="خطای ناشناخته"
# step 3
else: pass
# step 4
finally: return result



امیدوارم براتون مفید بوده باشه🙂

حمایت فراموش نشه😚❤️☕️
#Python #ErrorHandling #ExceptionHandling #PythonExceptions
#TryExcept #PythonProgramming #CodingTips #Debugging
#PythonTips #CodeQuality #RobustCode #PythonDev
#ErrorManagement #CleanCode #PythonLearning #comma_code #programing #پایتون #مدیریت_خطا #مدیریت_استثنا #خطا_در_پایتون
#تری_اکسپت #برنامه_نویسی_پایتون #نکات_کد_نویسی #دیباگ
#نکات_پایتون #کد_تمیز #برنامه_نویسی_ایمن #یادگیری_پایتون
#خطایابی #کد_حرفه_ای #پایتون_پیشرفته
#کاما_کد #برنامه_نویسی


🔤🔤🔤🔤🔤 🔤🔤🔤🔤

📱کانال تلگرامی
📱پیج اینستاگرام
📱چنل یوتیوب
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥3👍1👏1
دوست دارید راجب باگ اعشار شناور ويدئو آماده کنم؟ و توضیح بدم که چرا گاهی اوقات کار با اعداد اعشار اینقدر پیچیده میشه؟
Final Results
90%
بله. حتما اینکار رو انجام بده 👍
10%
خیر 👎
4🔥3👍2
اگر لوگو ساز هست بهم پیام بده
@ir_379
Media is too big
VIEW IN TELEGRAM
اعشار شناور

در این ویدئو توضیح دادم که چرا اعشار شناور رخ میده

امید وارم مفید باشه براتون ❤️

حمایت فراموش نشه 🙏😘


#پایتون #Python #آموزش_پایتون
#اعداد_اعشاری_شناور #FloatingPoint
#comma_code #کاما_کد
#نوع_داده_اعشاری #برنامه_نویسی
#نکات_پایتون #یادگیری_پایتون
📱کانال تلگرام
📱صفحه اینستاگرام
📱چنل یوتیوب


🔤🔤🔤🔤🔤 🔤🔤🔤🔤
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71👍1
با عملگر های بیتی آشنا هستید؟ ازش آموزش بزارم؟

(اگر آموزشی مد نظر دارید کامنت کنید)
Final Results
79%
نه آشنا نیستم و آموزش بزار 👍
21%
بله آشنا هستم و نیاز به آموزش نیست👎
🙏4
پایتون | python | برنامه‌نویسی | comma.code
با عملگر های بیتی آشنا هستید؟ ازش آموزش بزارم؟

(اگر آموزشی مد نظر دارید کامنت کنید)
رفقا هم ويدئو عملگرهای پایتون ضبط شده و هم یه ويدئو راجب فانکشن ها در پایتون فقط یخورده سرم شلوغ شده ولی به زودی ادیت میکنم و قرارشون میدم
6🔥1