teachify | Unsorted

Telegram-канал teachify - برنامه نویسی | Teachify

10327

برای موفق شدن 🌱 با این عبارت خداحافظی کن: "باشه فردا"🍃 💻 برای دسترسی راحت تر به مطالب به "لیست پین شده" برو🙃 👩‍💻 Support: @narges_madhi 🪧 ads: @teachifyads 💁‍♀️ instagram : instagram.com/teachify_ir

Subscribe to a channel

برنامه نویسی | Teachify

✔️ مفهوم 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 | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ نکاتی که باید به هنگام استفاده از هوش مصنوعی برای کدزنی یا دیباگ در نظر بگیرید!

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

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

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

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

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

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️چگونه اطلاعات اضافی را در رابطه‌های 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 | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ تفاوت 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 | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ تفاوت 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 | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

مسیر برگشت از مصاحبه 🥲

مصاحبه کننده در یک کلام عالی بود❤️

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

کی امروز از اینجا رد شده؟


@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

فردا مصاحبه دارم
پس فردا مصاحبه دارم
یه مصاحبه برای پریروز بود که کنسل کردن و تایمش رو گفتن اعلام میکنن که ممکنه اونم همین 2-3 روز دیگه باشه :))

پ.ن: هنوز قسمت نشده از فریلنسری دربیام بیرون :|

سوالاتی که ازم پرسیده میشه رو حتما براتون میذارم.
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ اضافه کردن و حذف عناصر از هر دو طرف لیست

اگر می‌خواهید عناصری را از هر دو طرف یک لیست اضافه یا حذف کنید، می‌توانید از deque (صف دوطرفه) استفاده کنید. برخلاف لیست‌های معمولی که فقط امکان اضافه یا حذف عناصر از یک طرف را می‌دهند، deque این امکان را فراهم می‌کند که از هر دو طرف لیست (چپ و راست) عناصر را مدیریت کنید.

این ویژگی زمانی که با داده‌های بزرگ یا ساختارهایی مثل پشته و صف کار می‌کنید بسیار کاربردی است. برای استفاده از deque باید ماژول collections را وارد کنید. مثال زیر نشان می‌دهد که چطور می‌توانید از این قابلیت بهره ببرید:

from collections import deque

# Create a deque
queue = deque()

# Add elements to both ends
queue.append(10) # Add to the right end
queue.appendleft(5) # Add to the left end

# Remove elements from both ends
right = queue.pop() # Remove from the right end
left = queue.popleft() # Remove from the left end

print(f"Right end: {right}, Left end: {left}")


نتیجه این کد:
Right end: 10, Left end: 5


@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ ساخت توابع خاص با functools.partial در پایتون

قابلیت functools.partial به شما کمک می‌کنه که از یک تابع موجود، نسخه‌ای بسازید که برخی از ورودی‌هاش به‌صورت پیش‌فرض تنظیم شده باشه.

فرض کنید تابعی دارید که دو عدد رو ضرب می‌کنه:

from functools import partial

# تعریف تابع اصلی
def multiply(x, y):
return x * y

# ساخت یک تابع جدید که مقدار x همیشه 5 باشه
partial_func = partial(multiply, 5)

# استفاده از تابع جدید
print(partial_func(3)) # خروجی: 15
print(partial_func(10)) # خروجی: 50


با استفاده از partial می‌تونیم یک نسخه جدید از تابع بسازیم که فقط یک عدد رو بگیره و مقدار x همیشه 5 باشه!
این باعث میشه کد شما تمیزتر و کاراتر بشه.

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ فشرده‌سازی شرط‌ها در پایتون با استفاده از all و any

گاهی نیاز دارید چندین شرط را همزمان بررسی کنید، اما نمی‌خواهید کدتان شلوغ و ناخوانا شود. اینجاست که توابع all و any به کمک شما می‌آیند!

فرض کنید می‌خواهید بررسی کنید که آیا تمام اعداد یک لیست مثبت هستند:

numbers = [3, 7, 9, 12]

if all(num > 0 for num in numbers):
print("All numbers are positive!")

تابع all زمانی True برمی‌گرداند که همه شرایط درست باشند.

حالا اگر بخواهید بررسی کنید که آیا حداقل یکی از اعداد زوج است:
if any(num % 2 == 0 for num in numbers):
print("At least one number is even!")

تابع any زمانی True برمی‌گرداند که حداقل یکی از شرایط درست باشد.
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️مدیریت فنی در گوگل - Kianoosh Mokhtarian

توی این قسمت از اپیزود طبقه 16، کیانوش مختاریان، مدیر و رهبر فنی در گوگل از مسیر جذاب خودش، از دانشگاه شریف تا کار در گوگل و نهایتاً بازگشت به ایران حرف میزنه

موضوعات جذاب گفتگو:

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

https://youtu.be/oXbVKzIt-gQ?si=sM37GBtw5JUGovj3

#گوگل #برنامه‌نویسی #مهندسی_نرم‌افزار #مصاحبه
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ توی یک #مصاحبه ای بودم

مصاحبه کننده واقعا درک کافی از مصاحبه رو داشت و من خیلی خوشم اومد از این مصاحبه.

سوالاتی که میپرسید بیشتر توی حوزه مهندسی نرم افزار بود و میخواست ببینه جواب من و تفکرات من به چه صورته ...
و در آخر هم گفت نیاز نیست شما با مصاحبه کننده های بعدی مقایسه بشید، شما با خودتون و با توجه به رزومه خودتون مقایسه میشید.

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

فک کن یه تسک داری که باید انجام بدی
محدودیت کامل زمانی هم داری،

اونوقت آنتن و اینترنت و همه چی به یک باره قط بشه :/
چیکار میکنی؟
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ متدهای جادویی __getitem__ و __setitem__ در پایتون

در پایتون می‌تونید با __getitem__ و __setitem__ یک شیء رو مثل لیست‌ها و دیکشنری‌ها مدیریت کنید! این متدها امکان دسترسی و تغییر عناصر با اندیس‌گذاری رو فراهم می‌کنند.

مثال:

class CustomList:
def __init__(self, data):
self.data = data

def __getitem__(self, index):
return self.data[index]

def __setitem__(self, index, value):
self.data[index] = value

clist = CustomList([10, 20, 30])
print(clist[1]) # دسترسی به اندیس 1
clist[1] = 50 # تغییر اندیس 1 به 50


#Python #Programming

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ Python List Methods

#Python
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

ترتیب سوالات خاطرم نیست ولی سعی میکنم عنوان ها رو بنویسم:
Design Patterns
OOP
Decorators
Generators
Signals
Database Transactions
Pure Python (این قسمت زیاد بود سوالاتش)
Built-in Functions (map)
Lambda Functions
Panda
Numpy
Python Libraries (Poetry, Decouple, PyDict, Flake8, Black)
Python Threading
Python / Processing

مصاحبه کننده یک شخص واقعا عالی بود و آدم از معاشرت باهاش لذت میبرد.
به هیچ عنوان خودش رو نمیگرفت و مثل یک دوست با هم حرف زدیم.
هر جا لازم میشد خودش برام بیشتر توضیح میداد.
جواب های منم تحسین میکرد و برای بعضی سوالات میگفت انتظار نداشتم بتونی جواب بدی :))
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

یکی از جنبه های اصلی 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 | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ مقایسه زبان‌های برنامه‌نویسی!!!

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

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

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

#برنامه‌نویسی
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

توی این مصاحبه سوالات زیاد بود به خصوص pure python.
حتما سرفرصت براتون تا جایی که یادم میاد مینویسم

Читать полностью…

برنامه نویسی | Teachify

ترب یه آگهی استخدام گذاشته و تکنولوژی های مورد استفاده اش رو گفته:
یکم خودتون رو محک بزنید :))

زبان برنامه‌نویسی: پایتون، جاوا اسکریپت.
فریم‌ورک به ترتیب اهمیت: Django, React, Starlette, FastAPI, Flask.
ذخیره و بازیابی اطلاعات به ترتیب اهمیت: postgresql, elasticsearch, redis, mongo, MinIO, ClickHouse, Influx, Prometheus,
داشبورد: grafana, kibana, metabase, amplitude.
زیرساخت: docker, kubernetes.
کنترل‌پروژه: gitlab.
تست و دیپلوی: gitlab-ci.

لینک جابینجا


@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

دوستان این پروژه رو میتونید توی لینک زیر ببینید:
https://github.com/yousefvafaei/Django-Upload-Manager
حتما اگه وقتش رو داشتین تست کنین و نظراتتون رو برام بگین.
اگه کدهاش رو دیدین و براتون مفید بود ممنون میشم اگه star بدین.

Читать полностью…

برنامه نویسی | Teachify

✔️ پورت‌های پیش‌فرض برخی از پایگاه داده‌های مهم

دیتابیس SQLite بدون پورت (فایل‌محور است).

دیتابیس PostgreSQL با پورت 5432

دیتابیس MySQL/MariaDB با پورت 3306

دیتابیس Oracle با پورت 1521

دیتابیس SQL Server با پورت 1433

دیتابیس MongoDB با پورت 27017
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ خوبه قبل از برنامه نویس شدن اینا رو ندیدم :)))

#fun #فان
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ یه roadmap خوب برای SQL

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

Finally after a week🥲

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

من هنوز درگیر اینما :))
واس همون کم پست میذارم🥲

Читать полностью…

برنامه نویسی | Teachify

همین چیزاست که باعث میشه شبا بیدار بمونیم و کار کنیم.🥲

پ.ن: فایل منیجر یا آپلود منیجر با قابلیت های فراوان که با زبان پایتون و فریمورک جنگو نوشته شده.

هنوز 50 درصدش اوکی شده!

@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ چقدر حقه این تصویر :))
دلم واسه ویکیپدیا سوخت🥹

#fun
@Teachify | برنامه نویسی

Читать полностью…

برنامه نویسی | Teachify

✔️ استفاده از متد جادویی __call__ در پایتون

متد __call__ در پایتون به شما اجازه می‌دهد تا یک شیء از کلاس خود را مثل یک تابع فراخوانی کنید. این کار می‌تواند در سناریوهایی که نیاز به پردازش پیچیده دارید، بسیار مفید باشد.

فرض کنید می‌خواهیم یک کلاس به نام Multiplier ایجاد کنیم که هر بار شیء آن مثل تابع فراخوانی می‌شود، ورودی‌ها را با یک مقدار خاصی که در ابتدا تنظیم شده، ضرب کند.

class Multiplier:
def __init__(self, factor):
self.factor = factor

def __call__(self, value):
return value * self.factor

# استفاده از کلاس
double = Multiplier(2)
triple = Multiplier(3)

print(double(5)) # خروجی: 10
print(triple(5)) # خروجی: 15


1. متد __init__: عامل (factor) را تنظیم می‌کند.
2. متد __call__: ورودی را با عامل از پیش‌تعریف شده ضرب کرده و نتیجه را برمی‌گرداند.

با این روش، می‌توان از هر شیء کلاس Multiplier به عنوان یک تابع استفاده کرد و در عین حال از ویژگی‌های شیءگرایی بهره برد.

#Python #Programming

@Teachify | برنامه نویسی

Читать полностью…
Subscribe to a channel