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


Admin: @Yousef_Vafaei
Download Telegram
✔️ اصطلاح Database Sharding در پایتون: راهکاری برای مقیاس‌پذیری

دیتابیس Sharding یکی از تکنیک‌های مقیاس‌پذیری دیتابیس است که در آن داده‌ها به چند بخش کوچک‌تر (shard) تقسیم می‌شوند و هر بخش در یک دیتابیس یا سرور جداگانه ذخیره می‌شود. این کار باعث افزایش سرعت و کاهش فشار روی یک سرور واحد می‌شود.

در پایتون برای مدیریت Sharding می‌توان از فریمورک‌های مختلف مثل SQLAlchemy برای پایگاه‌های داده‌ی رابطه‌ای یا MongoDB برای پایگاه‌های داده‌ی NoSQL استفاده کرد.

مثال ساده Sharding در SQLAlchemy
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
import random

# تعریف دو دیتابیس شارد شده
shard_1 = create_engine("sqlite:///shard_1.db")
shard_2 = create_engine("sqlite:///shard_2.db")

metadata = MetaData()

users = Table(
"users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String)
)

# ایجاد جدول در هر shard
metadata.create_all(shard_1)
metadata.create_all(shard_2)

# تابعی برای انتخاب shard بر اساس id
def get_shard(user_id):
return shard_1 if user_id % 2 == 0 else shard_2

# درج داده‌ها در shard مناسب
def insert_user(user_id, name):
shard = get_shard(user_id)
with shard.connect() as conn:
conn.execute(users.insert().values(id=user_id, name=name))

# جستجوی داده از shard مناسب
def get_user(user_id):
shard = get_shard(user_id)
with shard.connect() as conn:
result = conn.execute(users.select().where(users.c.id == user_id)).fetchone()
return result

# افزودن داده‌های نمونه
insert_user(1, "Ali")
insert_user(2, "Sara")

# دریافت داده
print(get_user(1)) # در shard_2 ذخیره شده
print(get_user(2)) # در shard_1 ذخیره شده


در این مثال، اگر id عدد زوج باشد، در shard_1 و اگر فرد باشد، در shard_2 ذخیره می‌شود. این یک راه ساده برای Sharding است، ولی روش‌های پیشرفته‌تری مثل Range-based و Consistent Hashing هم وجود دارند.

#Python #Database #Sharding #مقیاس_پذیری

@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
✔️ معرفی Pyperclip: مدیریت آسان کلیپ‌بورد در پایتون

در بسیاری از پروژه‌های برنامه‌نویسی، نیاز به تعامل با کلیپ‌بورد سیستم وجود دارد؛ به عنوان مثال، کپی و جای‌گذاری خودکار متن یا داده‌ها. کتابخانه Pyperclip یک راهکار ساده و کارآمد برای انجام این عملیات در پایتون فراهم می‌کند.

برای استفاده از این کتابخانه، کافی است آن را با دستور زیر نصب کنید:
pip install pyperclip
+ کپی کردن متن به کلیپ‌بورد
import pyperclip
pyperclip.copy("Hello, this text has been copied to the clipboard!")

+ دریافت متن از کلیپ‌بورد
text = pyperclip.paste()
print(text)

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

#Python #برنامه‌نویسی #کلیپ‌بورد

@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
برنامه نویسی | Teachify
Data = "022345678" Pos = Data.find("1") Pos2 = Data.rfind("2") print(Pos, Pos2)
✔️ تفاوت find() و rfind() در پایتون

در پایتون، دو متد find() و rfind() برای جستجوی یک زیررشته در یک رشته استفاده می‌شوند، اما تفاوت مهمی با هم دارند:
▪️متد find(substring) اولین وقوع substring را در رشته پیدا می‌کند.

▪️متدrfind(substring) آخرین وقوع substring را در رشته پیدا می‌کند.

برای مثال:
text = "banana"

print(text.find("a"))   # 1  (Index of the first occurrence of "a")
print(text.rfind("a"))  # 5  (Index of the last occurrence of "a")

اگر مقدار موردنظر در رشته وجود نداشته باشد، هر دو متد مقدار -1 برمی‌گردانند.

نکته:متدهای find() و rfind() در مقایسه با index() و rindex() امن‌تر هستند، زیرا در صورت نبود مقدار موردنظر، به‌جای ValueError مقدار -1 برمی‌گردانند.

#پایتون #Python
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤‍🔥2
✔️ ابزارهای مدرن برای متخصصان داده و هوش مصنوعی

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

▪️کتابخانه Polars جایگزین بهتری برای pandas است. این کتابخانه با پردازش موازی و استفاده بهینه از حافظه، عملکرد بهتری روی داده‌های حجیم دارد. نیازی به Index ندارد و از Lazy Evaluation پشتیبانی می‌کند، که باعث کاهش مصرف منابع و افزایش سرعت می‌شود.

▪️ برای محاسبات عددی، Numba می‌تواند جایگزین numpy شود. این ابزار با کامپایل JIT، سرعت اجرای کد را تا چندین برابر افزایش می‌دهد و حتی از GPU (با CUDA) نیز پشتیبانی می‌کند. مهم‌تر از همه، می‌توان کدهای numpy را با چند تغییر کوچک در Numba اجرا کرد.

▪️ در حوزه یادگیری عمیق، JAX انتخاب بهتری نسبت به TensorFlow است. سینتکس ساده‌تر، عملکرد بهینه‌تر، تمایز خودکار پیشرفته (AutoDiff) و پشتیبانی از تبدیل‌های تابعی، آن را به گزینه‌ای ایده‌آل برای تحقیقات علمی و مدل‌های سفارشی تبدیل کرده است.

▪️ اگر هنوز از Matplotlib برای رسم نمودار استفاده می‌کنید، بهتر است Bokeh را امتحان کنید. این کتابخانه امکان ساخت نمودارهای تعاملی و تحت وب را فراهم می‌کند، برای داده‌های حجیم بهینه شده است و می‌توان با آن داشبوردهای پویا طراحی کرد.

▪️ برای مدل‌های یادگیری ماشین مبتنی بر درخت تصمیم، LightGBM نسبت به XGBoost عملکرد بهتری دارد. این کتابخانه سرعت آموزش بالاتر، مصرف حافظه کمتر و پشتیبانی بهتری از ویژگی‌های دسته‌ای (Categorical Features) دارد.

با این تغییرات، می‌توانید سرعت پردازش، کارایی مدل‌ها و بهینه‌سازی منابع را بهبود دهید.


#پایتون #Python

@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
2
✔️ تشخیص عدد زوج در پایتون با یک روش سریع‌تر!

در پایتون معمولاً برای تشخیص عدد زوج از این روش استفاده می‌کنیم:
if num % 2 == 0:

اما یک روش جالب‌تر و بهینه‌تر هم وجود دارد که از عملیات بیتی استفاده می‌کند:
if (num & 1) == 0:

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

این روش در بسیاری از زبان‌های برنامه‌نویسی مثل پایتون، C، C++، جاوا و Go کار می‌کند. چون عملیات بیتی ذاتاً سبک‌تر از مدولوس % است، در برخی زبان‌ها عملکرد سریع‌تری دارد.


#پایتون #Python
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👌16👍9
✔️ جنگو 5.2 منتشر شد!

نسخه‌ی جدید جنگو (Django 5.2) با ویژگی‌های زیر منتشر شد:

+ ایمپورت خودکار مدل‌ها در شل
+ پشتیبانی از کلیدهای اصلی ترکیبی (Composite Primary Keys) 😲
+ بهبود در نحوه‌ی override کردن BoundField

این نسخه LTS (پشتیبانی طولانی‌مدت) است و تا آوریل 2028 پشتیبانی خواهد شد.

Django 5.2 Release Notes

#Django #Python
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
👌13👍5❤‍🔥31
✔️ کتابخانه Pydantic چیه؟ چرا باید بشناسیمش؟

اگه با Python کار می‌کنی و دنبال یه راه تمیز و مطمئن برای اعتبارسنجی داده‌ها و ساخت مدل‌های داده‌ای هستی، حتماً باید با Pydantic آشنا بشی!

این کتابخونه چیکار می‌کنه؟
- با استفاده از type hintها مدل داده می‌سازه
- داده‌ها رو به‌صورت خودکار validate می‌کنه
- نوع‌ها رو تبدیل (casting) می‌کنه
- کار با JSON، فرم‌ها و APIها رو آسون می‌کنه

from pydantic import BaseModel

class User(BaseModel):
age: int
name: str
email: str

data = {
"age": "28",
"name": "yousef",
"email": "yousef@example.com"
}

user = User(**data)

print(user.age) # 28 ← change str to int!
print(user.name) # yousef


بدون اینکه خودمون دستی داده رو بررسی کنیم، Pydantic خودش فهمید که باید "28" رو به عدد تبدیل کنه! اگه مقدار اشتباه باشه، ارور می‌گیریم.
همچنین اگه با FastAPI کار می‌کنی، بدون که Pydantic نقش اصلی رو توی مدل‌سازی و اعتبارسنجی درخواست‌ها بازی می‌کنه.

#Python #Pydantic #FastAPI #پایتون
@Teachify | برنامه نویسی
Please open Telegram to view this post
VIEW IN TELEGRAM
6👌3👍2
✔️ پنج روش ریورس کردن یک لیست در پایتون

@Teachify | #python_rd
👌11
✔️ چطور پایتون آرگومان‌ها رو به توابع پاس می‌ده؟

خیلی وقتا وقتی درباره‌ی ارسال آرگومان به توابع صحبت می‌شه، می‌شنویم:

Pass by Value (ارسال کپی)

Pass by Reference (ارسال خود متغیر)

اما پایتون یه مدل مخصوص خودش داره به اسم:

Pass by Object Reference
یا همون: Pass by Assignment

یعنی چی؟ بذار با یه مثال ساده توضیح بدیم:

فرض کن یه صندوق داری که توش وسیله‌س (مثل یه object پایتونی مثلاً list)
آدرسش رو روی یه کاغذ نوشتی و گذاشتی جیبت (این میشه reference)

وقتی یه تابعی می‌خواد از اون object استفاده کنه، پایتون یه کاغذ جدید درمیاره و همون آدرس رو روش می‌نویسه و می‌ده به تابع.
تابع با اون آدرس می‌تونه بره سراغ همون صندوق.

اگه چیزی از توش برداره یا تغییر بده، تو هم می‌بینی، ولی اگه یه صندوق جدید بسازه، فقط خودش اون رو داره

این دقیقاً میشه تفاوت بین mutable و immutable بودن objectها:

Mutable object (مثل list): تابع می‌تونه محتوای اصلی رو تغییر بده.

Immutable object (مثل int): تابع نمی‌تونه خودش رو تغییر بده، باید یه نسخه‌ی جدید بسازه.
مثال کد:
def demonstrate_passing_behavior(my_list, my_int):
    my_list.append(4)  # تغییر مستقیم در لیست اصلی
    my_list = list(my_list)  # ساخت کپی جدید
    my_int = my_int + 10  # ساخت int جدید، بدون تغییر عدد اصلی

original_list = [1, 2, 3]
original_int = 5
demonstrate_passing_behavior(original_list, original_int)

خروجی بعد از اجرای تابع:
original_list تغییر کرده (چون mutable بوده)

original_int همون قبلیه باقی مونده (چون immutable بوده)

در نتیجه:

> تو پایتون ما نه Pass by Value داریم، نه Pass by Reference
بلکه داریم: Pass by Object Reference

یعنی reference به object ارسال می‌شه، ولی خود reference به صورت value پاس می‌شه!

#پایتون #Python #برنامه‌نویسی

@Teachify | برنامه نویسی
👍5
#python
#quiz
@Teachify | برنامه نویسی
4
✔️ کتابخانه Polars — نسل بعدی پردازش داده در پایتون!

اگر با Pandas کار کردی، حتماً می‌دونی گاهی موقع کار با دیتاست‌های بزرگ، سرعتش کم می‌شه و RAM رو می‌بلعه،
اینجاست که Polars وارد می‌شه!

میشه گفت که Polars یه کتابخانه‌ی فوق‌سریع برای تحلیل داده‌ست، نوشته‌شده با زبان Rust و طراحی‌شده برای کار با داده‌های حجیم، چند‌هسته‌ای و سنگین.

چرا Polars بهتر از Pandas عمل می‌کنه؟

■ چندریسمانی (Multi-threaded): از تمام هسته‌های CPU استفاده می‌کنه

■ مبتنی بر Apache Arrow (حافظه‌ی ستونی فوق‌بهینه)

■ مصرف RAM بسیار کمتر

■ تا ۱۰ تا ۱۰۰ برابر سریع‌تر از Pandas در بعضی عملیات‌ها

■ پشتیبانی از حالت Lazy Execution (محاسبه فقط وقتی واقعاً نیاز باشه)

مثال ساده:
import polars as pl

df = pl.read_csv("data.csv")

result = (
    df.filter(pl.col("age") > 30)
      .select(pl.col("salary").mean())
)
print(result)

کد بالا دقیقاً کاری شبیه Pandas انجام می‌ده، ولی خیلی سریع‌تر و بهینه‌تر اجرا می‌شه!

#Python #Polars #Pandas #DataScience #Rust #FastData

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