CodeBaz.dev
696 subscribers
673 photos
108 videos
155 files
495 links
من، محمدرضا کسائی، برنامه‌نویس فول‌استک در تپسی و مدرس پایتون و جنگو در مجتمع فنی تهران هستم. در اینجا قصد دارم تجربیات و دانش خود را در زمینه‌های مختلف برنامه‌نویسی با شما به اشتراک بگذارم.
https://CodeBaz.dev
https://x.com/CodebazDev
Download Telegram
تفاوت list و tuple رو میدونید؟
لطفا در کامنت بنویسید
Anonymous Poll
78%
بله
22%
خیر
CodeBaz.dev
تفاوت list و tuple رو میدونید؟
لطفا در کامنت بنویسید
📚 تفاوت لیست و تاپل در پایتون

1️⃣ تغییرپذیری (Mutability):
- 🔸 لیست: قابل تغییر است.

     # مثال:
my_list = [1, 2, 3]
my_list[0] = 10 # تغییر عنصر
my_list.append(4) # اضافه کردن عنصر جدید
print(my_list) # خروجی: [10, 2, 3, 4]

- 🔹 تاپل: غیرقابل تغییر است.

     # مثال:
my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # خطا : تاپل تغییرپذیر نیست!
print(my_tuple) # خروجی: (1, 2, 3)

---

2️⃣ کاربردها:
- لیست: برای داده‌های تغییرپذیر، مثل لیست خرید:

     shopping_list = ["milk", "bread", "eggs"]
shopping_list.append("cheese") # اضافه کردن محصول جدید
print(shopping_list) # خروجی: ['milk', 'bread', 'eggs', 'cheese']

- تاپل: برای داده‌های ثابت، مثل مختصات جغرافیایی:

     coordinates = (35.6892, 51.3890)  # مختصات تهران
print(coordinates) # خروجی: (35.6892, 51.3890)

---

3️⃣ سرعت و عملکرد:
- تاپل‌ها به دلیل غیرقابل تغییر بودن (immutable) و متدهای کمتر سریع‌تر هستند.

     print("تعداد متدهای لیست:", len(dir(list)))  # تعداد متدهای لیست
print("تعداد متدهای تاپل:", len(dir(tuple))) # تعداد متدهای تاپل

نتیجه:
لیست‌ها متدهای بیشتری مثل append، remove و غیره دارند که نیاز به مدیریت حافظه و عملکرد بیشتر دارند. این موضوع باعث کاهش سرعت نسبی آن‌ها می‌شود.

---

4️⃣ استفاده در دیکشنری:
- لیست نمی‌تواند به عنوان کلید استفاده شود، اما تاپل می‌تواند.

     # مثال:
my_dict = {("latitude", "longitude"): "Tehran"}
print(my_dict[("latitude", "longitude")]) # خروجی: Tehran

---

5️⃣ حجم حافظه:
- لیست‌ها به دلیل ساختار پیچیده‌تر و متدهای بیشتر، حافظه بیشتری نسبت به تاپل‌ها اشغال می‌کنند.
با استفاده از تابع dir می‌توان تفاوت تعداد متدها و ساختارها را مشاهده کرد:


     import sys

sample_list = [1, 2, 3]
sample_tuple = (1, 2, 3)

print("تعداد متدهای لیست:", len(dir(sample_list))) # تعداد متدهای لیست
print("تعداد متدهای تاپل:", len(dir(sample_tuple))) # تعداد متدهای تاپل

print("حجم لیست:", sys.getsizeof(sample_list), "بایت") # حجم لیست
print("حجم تاپل:", sys.getsizeof(sample_tuple), "بایت") # حجم تاپل

نتیجه:
- تعداد متدها:
لیست‌ها متدهای بیشتری نسبت به تاپل‌ها دارند، که نشان‌دهنده پیچیدگی بیشتر آن‌ها است:
- تعداد متدهای لیست: 47
- تعداد متدهای تاپل: 33
- حجم حافظه:
- حجم لیست: بیشتر است زیرا ساختار داده‌ای آن باید قابلیت مدیریت تغییرات (مثل افزودن یا حذف عناصر) را داشته باشد.
- حجم تاپل: کمتر است زیرا ساختار ساده‌تری دارد و تغییرپذیر نیست.

تحلیل:
پیچیدگی بیشتر لیست‌ها و متدهای اضافه باعث افزایش سربار حافظه می‌شود. برای مثال، متدهایی مانند append و remove نیازمند حافظه اضافی برای ذخیره اطلاعات مربوط به تغییرات هستند، اما تاپل‌ها چون غیرقابل تغییر هستند، نیازی به این حافظه اضافی ندارند.

---

🎯 مقایسه خلاصه:
- لیست: تغییرپذیر، متدهای بیشتر، حجم بیشتر، مناسب داده‌های پویا.
- تاپل: غیرقابل تغییر، متدهای کمتر، حجم کمتر، مناسب داده‌های ثابت.

#پایتون_پیشرفته
👍63
print(1 == 1.0)
print(1 is 1.0)
CodeBaz.dev
print(1 == 1.0) print(1 is 1.0)
به نظرتون خروجی کد بالا چی میشه؟
Anonymous Quiz
10%
False False
20%
False True
17%
True True
54%
True False
CodeBaz.dev
خروجی کد بالا چی میشه؟
این سوال نکته داشت
خیلی ها اشتباه پاسخ دادند
دلیلش به صورت خلاصه اینه که اعداد کوچک و یه سری مقادیر تو پایتون cache میشن
به زودی یه مقاله در موردش مینویسم و بیشتر توضیح میدم در موردش
👍3
CodeBaz.dev
خروجی کد بالا چی میشه؟
پایتون هم مثل لینوکس توزیع های مختلفی داره
مثلا iron python و jython و CPython و ...
اگر نمیدونید از کدومش استفاده میکنید، شما دارید از نسخه CPython استفاده می‌کنید. این همون نسخه‌ای هست که تو python.org قرار داره
تو این توزیع از پایتون، اعداد صحیح از -۵ تا ۲۵۶ تو خود پایتون cache میشن و اگه بهشون کاری نداشته باشیم برای خودشون تا آخر برنامه یه جایی از رم زندگی می‌کنند به همین دلیل id شون تا اخر ثابت می‌مونه به همین دلیل هست که در این سوال، گزینه سوم درست میشه
به زودی یه مقاله منتشر میکنم و توضیحات بیشتری میدم
@CodeBazDev
👍4
میدونید بهترین روش پولدار شدن با برنامه نویسی شی‌گرا (oop) چیه؟
.
.
.
.
ارت بری 😂
@CodeBazDev
#joke
🤣7
یه اتفاق جالب برام افتاده
تو ۳۰ روز گذشته +50 امتیاز تو استک اورفلو فقط برای یک پاسخ مربوط به routing توی expo به دست آورده ام.
دو تا چیز میشه فهمید
- اول اینکه با وجود chat gpt هنوز stackoverflow داره به خوبی استفاده میشه. این نشون میده که chat gpt مشکلات پیچیده رو نمیتونه حل کنه هنوز
- دوم اینکه بریم expo یاد بگیریم. ظاهرا این روزا expo بیشتر رو بورسه
لینک این سوال تو استک‌اورفلو
@CodeBaz.dev
2
خیلی از تازه کاران نمیدونند که چطوری فکر کنند. یکی از همکارام دیروز یه هوش مصنوعی بهم معرفی کرد که اسمش DeepSeek هست. یه حالتی داره به اسم DeepThink که خیلی جالبه. اگه این حالتش رو فعال کنید میتونید ببینید که اون هوش مصنوعی چطوری فکر میکنه تا جواب شما رو بده.
این کمک میکنه که نحوه فکر کردن برای حل مسائل رو یاد بگیرید.
البته خیلی هنوز ازش استفاده نکرده ام و نمیدونم نسبت به chat gpt چقدر جواب هاش قابل اطمینان تره

https://www.deepseek.com/
@CodeBazDev
2👍2
لوتی جی‌پی‌تی 😂
@CodeBazDev
😁4
به نظر من یکی از سخت ترین کار های دنیا نوشتن کامنت مناسب برای یک کامیت هستش
نظر شما چیه؟
#git
@CodeBazDev
👌5💯2😭1
CodeBaz.dev
به نظر من یکی از سخت ترین کار های دنیا نوشتن کامنت مناسب برای یک کامیت هستش نظر شما چیه؟ #git @CodeBazDev
به نظر من سینیور بودن یه نفر رو میشه با نگاه کردن به کامنت های کامیت هاش فهمید.
نه اینکه اگه کسی کامنت خوب ننوشت سینیور نباشه، ولی اگه کامنت خوب نوشته بود میشه گفت یکی از مولفه های سینیور بودن رو داره
#git
@CodeBazDev
👍3👏1
میدونید چرا کامنت نویسی برای کامیت ها سخته؟
اگه توی اون کامیت بیش از یک کار انجام شده باشه نوشتن کامنتش سخت میشه
مثلا اگه دو تا باگ حل شده باشه و یه فیچر اضافه شده باشه نمیشه یه کامنت واضح نوشت
پس پیشنهادم اینه که تعداد کامیت ها رو زیاد کنید.
به محض اینکه کوچکترین باگی حل شد یا کوچکترین فیچری اضافه شد کامیت مربوطه اش رو بزنید.
#git
@CodeBazDev
👍4💯2
حواستون باشه یه موقع از اون طرف بوم هم نیوفتید. یعنی تعداد کامیت ها رو به صورت بی‌رویه زیاد نکنید.
منظورم اینه که اگه مثلا یه فایل اضافه کردید که به تنهایی یک فیچر حساب نمیشه کامیتش نکنید.
سعی کنید فیچری به موضوع نگاه کنید.
اضافه شدن هر فیچر = یک کامیت
حذف کردن هر فیچر = یک کامیت
حل هر باگ = یک کامیت

#git
@CodeBazDev
👌1
از وقتی اومدم تپسی اینقدر بیشتر کار میکنم که وقتی دارم کد میزنم حس اون نونوایی رو دارم که تو سنگکی با یه ریتم زیبایی خمیر پهن میکنه
🤣4👍1
من از فرمول زیر برای نام‌گذاری branch های گیت استفاده میکنم
TASK_TYPE/TASK_NAME

TASK_TYPE = fix (باگ فیکس)
TASK_TYPE = fe (فیچر جدید)
TASK_TYPE = hotfix (فیکس سرعتی)
TASK_NAME = نام تسکی شما

مثلا اگه دارم باگ لاگین رو حل میکنم یه برنچ به اسم fix/login درست میکنم.
مثلا اگه دارم صفحه اشتراک گذاری رو درست میکنم اسم برنچ رو میذارم fe/sharing
#git
@CodeBazDev
👍4
وقتی به عنوان سرپرست برنامه‌نویسان توی یه گروهی مشغول به کار بودم یه چالشی که داشتم این بود که نمیدونستم کدوم برنامه نویس الان داره روی کدوم برنچ کار میکنه. برای حل این مشکل با خودشون جلسه گذاشتم و تصمیم گرفتیم که اسم‌هامون رو هم توی نام برنچ بنویسیم. مثلا اگه من قرار بود تسک «اضافه کردن امکان آپلود تصویر» رو انجام بدم اسم برنچش رو میذاشتیم:
fe/mmreza/upload-image

البته الان که فکر میکنم میبینم نیازی نبود این کارو کنیم. روش های بهتری هم بود که بشه فهمید کی رو چه برنچی کار میکنه که تو پست بعدی میگم ولی قبلش دوست دارم اگه کسی ایده ای داره بگه
#git
@CodeBazDev
👍3