برنامه نویسی | Teachify
12.1K subscribers
1.01K photos
420 videos
231 files
648 links
برای موفق شدن 🌱 با این عبارت خداحافظی کن: "باشه فردا"🍃


Admin: @Yousef_Vafaei
Download Telegram
✔️ تفاوت 3 نوع دیتاتایپ لیست، تاپل و ست در پایتون چیست؟

1. لیست (List)
تغییرپذیر (Mutable): می‌توانید عناصر را اضافه، حذف یا تغییر دهید.
مرتب (Ordered): ترتیب عناصر همان‌طور که اضافه شده‌اند حفظ می‌شود.
اجازه مقادیر تکراری: می‌توانید مقادیر تکراری داشته باشید.
از براکت ([]) برای تعریف استفاده می‌شود.
my_list = [1, 2, 3, 3, 4]
my_list.append(5) # اضافه کردن عنصر
my_list[0] = 10 # تغییر مقدار
print(my_list) # خروجی: [10, 2, 3, 3, 4, 5]

2. تاپل (Tuple)
تغییرناپذیر (Immutable): پس از تعریف، نمی‌توانید عناصر آن را تغییر دهید.
مرتب (Ordered): ترتیب عناصر حفظ می‌شود.
اجازه مقادیر تکراری: مانند لیست، می‌توانید مقادیر تکراری داشته باشید.
کارایی بالاتر: به دلیل تغییرناپذیری، تاپل‌ها سریع‌تر از لیست‌ها هستند.
از پرانتز (()) برای تعریف استفاده می‌شود.
my_tuple = (1, 2, 3, 3, 4)
# my_tuple[0] = 10 # خطا: تغییرناپذیری
print(my_tuple[1]) # دسترسی به عنصر دوم: 2

3. ست (Set)
تغییرپذیر (Mutable): می‌توانید عناصر را اضافه یا حذف کنید.
بدون ترتیب (Unordered): ترتیب عناصر تضمین‌شده نیست.
بدون مقادیر تکراری: ست فقط مقادیر یکتا را ذخیره می‌کند.
از آکولاد ({}) برای تعریف استفاده می‌شود.
my_set = {1, 2, 3, 3, 4}
my_set.add(5) # اضافه کردن عنصر
print(my_set) # خروجی: {1, 2, 3, 4, 5} (بدون تکرار و ترتیب مشخص)


@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
This media is not supported in your browser
VIEW IN TELEGRAM
✔️ مقایسه زبان‌های برنامه‌نویسی!!!

یک تحلیل جذاب از عملکرد زبان‌های مختلف برنامه‌نویسی: 

نکات مهم: 
- زبان های Java و Kotlin عملکرد بسیار سریعی دارند؛ احتمالاً به دلیل تمرکز ویژه گوگل روی بهینه‌سازی این زبان‌ها. 
- زبان JavaScript در بین زبان‌های تفسیری و JIT، از نظر سرعت عملکردی فوق‌العاده دارد. 
- زبان Python، در مقایسه با سایر زبان‌ها، بدون استفاده از ابزارهایی مثل PyPy نسبتاً کندتر است. 

📂 کدهای مربوط به این بررسی را میتوانید در مخزن زیر ببینید:
https://github.com/bddicken/languages

#برنامه‌نویسی
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👌12👍1
✔️ تفاوت copy و deepcopy در پایتون!

کپی ساده (Shallow Copy):
وقتی یک کپی ساده از یک شیء می‌گیرید، فقط ارجاع به عناصر اصلی درون شیء ساخته میشه.

import copy

original_list = [1, 2, [3, 4]]
shallow_copy = copy.copy(original_list)

# تغییر در لیست اصلی
original_list[0] = 100
print("Original:", original_list) # [100, 2, [3, 4]]
print("Shallow Copy:", shallow_copy) # [1, 2, [3, 4]]


تغییر مستقیم روی مقادیر اصلی در کپی ساده تأثیر نمی‌ذاره.
اما اگر عناصر تو در تو (مثل لیست داخل لیست) تغییر کنن، کپی هم تحت تأثیر قرار می‌گیره:

# تغییر در یک عنصر تو در تو
original_list[2][0] = 300
print("Original:", original_list) # [100, 2, [300, 4]]
print("Shallow Copy:", shallow_copy) # [1, 2, [300, 4]]


دیپ کپی (Deep Copy):
وقتی دیپ کپی می‌گیرید، یک کپی کامل از شیء و تمام زیرمجموعه‌های درونی اون ساخته میشه. به عبارت دیگه، حتی اشیای تو در تو هم جداگانه کپی میشن.

deep_copy = copy.deepcopy(original_list)

# تغییر در عنصر تو در تو
original_list[2][0] = 500
print("Original:", original_list) # [100, 2, [500, 4]]
print("Deep Copy:", deep_copy) # [1, 2, [300, 4]]


تغییر در عناصر تو در توی شیء اصلی، هیچ اثری روی دیپ کپی نداره.
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
یکی از جنبه های اصلی ORM که معمولا نادیده گرفته میشه!

این جنبه اینه که ORM می‌تونه رفتار خاص هر پایگاه داده رو مدیریت کنه و توسعه‌دهنده رو از این پیچیدگی‌ها بی‌نیاز کنه.

از اونجایی که دیتابیس‌ها اصول و رفتارهای خاص خودشون رو دارن، مثلاً:

گویش‌های SQL یا SQL Dialect:
هر پایگاه داده (مثل MySQL، PostgreSQL یا Oracle) نسخه خاص خودش از SQL رو داره که ممکنه در جزئیات مثل نحوه نوشتن کوئری، نوع داده‌ها یا عملیات پیشرفته تفاوت داشته باشه. ORM این تفاوت‌ها رو پنهان می‌کنه و شما می‌تونید با یک زبان واحد (مثل کدهای پایتون در SQLAlchemy یا Django ORM) کار کنید.

بهینه‌سازی عملکرد:
از اونجایی که ORM می‌دونه هر دیتابیس در چه چیزی قوی‌تره (مثلاً PostgreSQL برای Queryهای پیچیده عالیه، ولی SQLite برای عملیات‌های سبک مناسب‌تره) و سعی می‌کنه بهینه‌ترین کوئری‌ها رو برای اون دیتابیس تولید کنه.

محدودیت‌های خاص دیتابیس‌ها:
مثلاً برخی دیتابیس‌ها از ویژگی‌های خاصی مثل Partial Indexes، Full Text Search یا JSON Fields پشتیبانی می‌کنن. ORM‌ها اغلب این قابلیت‌ها رو شناسایی کرده و ازشون استفاده می‌کنن.

مدیریت اتصال و تنظیمات خاص:
با استفاده از ORM‌ها تنظیمات خاص دیتابیس مثل زمان‌بندی اتصالات، مدیریت تراکنش‌ها و تنظیمات سطح دسترسی رو به طور خودکار انجام میشن.

در نتیجه با استفاده از ORM، نیازی نیست که توسعه‌دهنده خودش با پیچیدگی‌های دیتابیس خاصی درگیر بشه. ORM این نقش رو بر عهده می‌گیره و به سیستم کمک می‌کنه که بفهمه دقیقاً با چه دیتابیسی سروکار داره و چطور باید باهاش رفتار کنه.

این یعنی، ORM فراتر از یک ابزار برای تبدیل اشیا به جداول عمل می‌کنه؛ بلکه یه مدیر هوشمند بین دیتابیس و برنامه است که باعث می‌شه توسعه نرم‌افزار راحت‌تر، سریع‌تر و سازگارتر با انواع دیتابیس‌ها باشه.

@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
✔️چگونه اطلاعات اضافی را در رابطه‌های ManyToMany جنگو ذخیره کنیم؟

در جنگو، روابط چند به چند به‌صورت پیش‌فرض ساده هستند و تنها رابطه بین دو مدل را نگهداری می‌کنند. اما وقتی نیاز به ذخیره اطلاعات اضافی درباره این رابطه دارید (مثل تاریخ، وضعیت، یا توضیحات)، باید از ویژگی قدرتمند through استفاده کنید. بیایید با جزئیات این مفهوم را بررسی کنیم:

اگر به‌صورت ساده از ManyToManyField استفاده کنید، جنگو خودش یک جدول واسط (Intermediate Table) برای مدیریت رابطه بین دو مدل ایجاد می‌کند که در تصویر مدل BookAuthor میباشد.

در این حالت جنگو خودکار جدولی ایجاد می‌کند که تنها دو ستون دارد و شما نمی‌توانید اطلاعات اضافه (مثل تاریخ انتشار یا نقش نویسنده) را ذخیره کنید.
| book_id | author_id |

وقتی نیاز دارید اطلاعات بیشتری در مورد رابطه ذخیره کنید، through به شما امکان می‌دهد یک مدل سفارشی برای جدول واسط بسازید. این مدل می‌تواند علاوه بر کلیدهای خارجی، فیلدهای اضافی هم داشته باشد.

فرض کنید می‌خواهید رابطه بین کتاب و نویسنده را ذخیره کنید و علاوه بر آن، تاریخ انتشار همکاری را نیز نگهدارید، کد شما به صورت تصویر پیوست شده خواهد بود.

ایجاد نویسنده و کتاب:
author = Author.objects.create(name="John Doe")
book = Book.objects.create(title="Python for Beginners")


افزودن نویسنده به کتاب با اطلاعات اضافی:
BookAuthor.objects.create(book=book, author=author, publication_date="2024-01-01")


حالا می‌توانید اطلاعات رابطه را بخوانید:
relations = BookAuthor.objects.all()
for relation in relations:
print(f"{relation.author.name} wrote '{relation.book.title}' on {relation.publication_date}")


#Django #Python
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
برنامه نویسی | Teachify
توی این مصاحبه سوالات زیاد بود به خصوص pure python. حتما سرفرصت براتون تا جایی که یادم میاد مینویسم
ترتیب سوالات خاطرم نیست ولی سعی میکنم عنوان ها رو بنویسم:
Design Patterns
OOP
Decorators
Generators
Signals
Database Transactions
Pure Python (این قسمت زیاد بود سوالاتش)
Built-in Functions (map)
Lambda Functions
Pandas
Numpy
Python Libraries (Poetry, Decouple, PyDict, Flake8, Black)
Python Threading
Python / Processing

مصاحبه کننده یک شخص واقعا عالی بود و آدم از معاشرت باهاش لذت میبرد.
به هیچ عنوان خودش رو نمیگرفت و مثل یک دوست با هم حرف زدیم.
هر جا لازم میشد خودش برام بیشتر توضیح میداد.
جواب های منم تحسین میکرد و برای بعضی سوالات میگفت انتظار نداشتم بتونی جواب بدی :))
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2
✔️ نکاتی که باید به هنگام استفاده از هوش مصنوعی برای کدزنی یا دیباگ در نظر بگیرید!

ورودی دقیق بدهید: سوالات و توضیحات خود را به‌صورت واضح و جزئی مطرح کنید تا پاسخ‌های مرتبط‌تری دریافت کنید.

از کد یاد بگیرید: کدی که هوش مصنوعی تولید می‌کند را بررسی کنید و با مطالعه آن مهارت‌های خود را ارتقا دهید.

ساده‌سازی کد: اگر کد تولید شده بیش از حد پیچیده است، آن را بازنویسی کنید تا خواناتر و بهینه‌تر شود.

سازگاری با تیم: کد تولید شده را مطابق با استانداردها و سبک کدنویسی تیم خود تنظیم کنید.

پایداری و امنیت: همیشه کد را از نظر امنیت و کارایی بررسی کنید؛ ممکن است آسیب‌پذیری‌هایی در کد وجود داشته باشد.

@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤣2
✔️ Python List Methods

#Python
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
✔️ مفهوم match-case در پایتون (نسخه 3.10 به بعد)

اگر تا حالا با شرایط پیچیده در پایتون سروکله زدید، match-case کار شما رو راحت‌تر می‌کنه! این ویژگی مثل switch-case در زبان‌های دیگه عمل می‌کنه، اما با قدرتی فراتر برای مدیریت الگوهای پیچیده.

فرض کنید می‌خواهید داده‌های مختلفی رو پردازش کنید، مثل ایجاد، حذف یا به‌روزرسانی یک آیتم. به کمک این قابلیت، این کار ساده‌تر و مرتب‌تر میشه:

def process_data(data):
match data:
case {"action": "create", "id": id, "content": content}:
print(f"Creating a new item with ID: {id} and content: {content}")
case {"action": "delete", "id": id}:
print(f"Deleting the item with ID: {id}")
case {"action": "update", "id": id, "content": content}:
print(f"Updating the item {id} with content: {content}")
case _:
print("Invalid data")

# Test the function
process_data({"action": "create", "id": 1, "content": "Hello"})
process_data({"action": "delete", "id": 2})
process_data({"action": "update", "id": 3, "content": "Updated content"})


▪️مزایای match-case:
- کد خواناتر و قابل‌درک‌تر از if-else های تو در تو
- تطبیق الگوهای پیچیده (مثل دیکشنری‌های تو در تو)
- انعطاف بالا برای مدیریت داده‌ها

#پایتون #python
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
✔️ درسته ما کارمون با پایتونه ولی می‌دونید چرا PHP نسخه 6 نداره؟ 🤔

بعد از نسخه 5.6، نسخه 7 منتشر شد، اما نسخه 6 چی شد؟ کجا رفت؟

نسخه 6 قرار بود منتشر بشه، اما به دلیل مشکلاتی، هیچ‌وقت به نتیجه نرسید و به‌طور کامل کنار گذاشته شد.

ایده اصلی نسخه 6، اضافه کردن پشتیبانی از یونیکد به هسته PHP بود. هدف این بود که PHP بتونه تمام زبان‌های دنیا و کاراکترهاشون رو پشتیبانی کنه. حتی مثلاً می‌شد از ایموجی‌ها به عنوان اسم متغیر یا تابع استفاده کرد!

اما چرا این پروژه شکست خورد؟

1. تغییرات سنگین: برای این قابلیت باید کلی ساختار زبان تغییر می‌کرد، که اجرای اون واقعاً سخت و پیچیده بود.

2. مشکلات عملکردی: اضافه کردن یونیکد باعث افت شدید پرفورمنس PHP می‌شد، که برای اکثر برنامه‌نویسا غیرقابل‌قبول بود.

در نهایت، پروژه نسخه 6 کنار گذاشته شد و قابلیت‌هایی که قابل پیاده‌سازی بودن، در نسخه 7 ارائه شدن.
@Teachify | Rasoul Esmaeili
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🤣1
✔️ آشنایی با Walrus Operator در پایتون (به معنی شیرآبی)

در نسخه ۳.۸ پایتون، اپراتوری به نام Walrus Operator (با نماد :=) معرفی شد که هدف آن ساده‌تر کردن کدنویسی در شرایط خاص است. این اپراتور به شما اجازه می‌دهد هم‌زمان یک مقدار را به یک متغیر اختصاص دهید و از آن استفاده کنید.

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

بدون Walrus Operator:
words = ["apple", "pie", "banana", "kiwi"]
for word in words:
if len(word) > 3:
print(word)


با Walrus Operator:
words = ["apple", "pie", "banana", "kiwi"]
for word in words:
if (length := len(word)) > 3:
print(f"{word} (length: {length})")


در کد دوم، مقدار طول کلمه (با نام length) محاسبه شده و هم‌زمان در شرط و چاپ استفاده می‌شود، بدون نیاز به محاسبه مجدد.

مثال های دیگر:

حلقه‌های ورودی:
while (user_input := input("Enter something: ")) != "exit":
print(f"You entered: {user_input}")


خواندن از فایل:
with open("data.txt") as file:
while (line := file.readline().strip()):
print(line)


#Python
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
✔️ انواع ساختار داده در برنامه نویسی

در دنیای برنامه‌نویسی و علوم کامپیوتر، ساختارهای داده (Data Structures) ابزارهایی هستند که نحوه سازماندهی و مدیریت داده‌ها را تعیین می‌کنند. این ساختارها مستقیماً بر کارایی و سرعت الگوریتم‌ها تأثیر می‌گذارند. هر برنامه‌نویس باید با انواع ساختار داده در برنامه نویسی آشنا باشد، چراکه استفاده صحیح از ساختار داده مناسب می‌تواند زمان اجرا را کاهش داده و مصرف حافظه را بهینه کند و همچنین مشکلات پیچیده‌ای مثل جستجو، مرتب‌سازی، یا مدیریت داده‌های بزرگ را ساده‌تر کند.

در کالی بویز بخوانید: انواع ساختار داده در برنامه نویسی

@kaliboys | کالی بویز
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
How do you create a tuple with a single value in Python?
Anonymous Quiz
28%
(1)
16%
{1}
50%
(1,)
6%
[1]
6🐳21
Which option is correct? print(0o576)
Anonymous Quiz
27%
SyntaxError
14%
0o576
29%
382
29%
ValueError
👍3🤯1
برنامه نویسی | Teachify
Which option is correct? print(0o576)
✔️ نحوه نمایش اعداد در مبناهای مختلف و تبدیل آن‌:

مبنای 2 (دودویی یا باینری): پیشوند 0b یا 0B
ارقام معتبر: فقط 0 و 1
مثال: 0b11111111 معادل 255 در ده‌دهی است.

مبنای 8 (هشت‌هشتی یا اوکتال): پیشوند 0o یا 0O
ارقام معتبر: از 0 تا 7
مثال: 0o377 معادل 255 در ده‌دهی است.

مبنای 16 (شانزده‌هشتی یا هگزادسیمال): پیشوند 0x یا 0X
ارقام معتبر: از 0 تا 9 و حروف a-f یا A-F
مثال: 0xff معادل 255 در ده‌دهی است.

برای نمایش این اعداد در مبناهای مختلف:
x = 255
print(bin(x)) # '0b11111111'
print(oct(x)) # '0o377'
print(hex(x)) # '0xff'


در نتیجه، هرکدام از این پیشوندها عدد را در مبناهای مختلف نمایش می‌دهند. توجه داشته باشید که اگر غیر از ارقام معتبر وارد کنید، خطای SyntaxError رخ می‌دهد.

@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤‍🔥31
print(True + True)
Anonymous Quiz
24%
error
32%
1
11%
2True
32%
2
👀114
✔️ برنامه‌نویس‌ها درونگرای برونگرا هستند!!

برنامه‌نویس‌ها معمولاً درونگرا به نظر می‌رسن؛ عاشق کار در سکوت و غرق شدن در دنیای کدها هستند. اما کافیه یکی مثل خودشون رو ببینن! اون وقت انگار یه جرقه روشن میشه و برونگرایی‌شون فوران می‌کنه!

شاید این به خاطر این باشه که کنار هم‌فکرهاشون، حرف زدن راحت‌تره، چون نیاز نیست چیزی رو توضیح بدن؛ اونا حرف های همو می‌فهمن.

حالا تو چطور؟ وقتی با یه برنامه‌نویس دیگه حرف می‌زنی، برونگرا میشی؟

#برنامه‌نویسی #درونگرایی #برونگرایی
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🤣83👎1
برنامه نویسی | Teachify
Channel photo updated
نظرتون درباره لوگو جدید؟
Anonymous Poll
72%
👍
28%
👎
✔️ به نظر من که درست میگه :)))

نظر شما چیه؟
#fun
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👎10😁3🤣2