آموزش پایتون
88 subscribers
281 photos
21 videos
81 files
178 links
ارتباط با ما:
@learnpythonicyBot

لینک گروه چت:
https://t.me/learnpythonicychat

لینک چنل ایتا:
https://eitaa.com/learnpythonicy
Download Telegram
✔️ تابع reduce

در پایتون، ماژول functools دسترسی به قابلیت‌های تابعی (Functional Programming) زبان را فراهم می‌کند.
یکی از توابع مهم و کاربردی این ماژول، تابع reduce است که با اعمال متوالی یک تابع مشخص روی عناصر یک مجموعه داده، آن مجموعه را به یک مقدار نهایی کاهش می‌دهد و نتایج میانی را در طول فرآیند حفظ می‌کند.

به‌عنوان مثال، می‌توان عملکرد reduce را در ضرب متوالی اعداد مشاهده کرد:
ابتدا عدد 1 در 2 ضرب می‌شود، سپس حاصل به‌دست‌آمده در 3 ضرب می‌گردد و این روند به همین شکل ادامه پیدا می‌کند.

#python | #functools | @learnpythonicy
✔️ حذف None و مقادیر تکراری با حفظ ترتیب در پایتون

در بسیاری از سناریوهای واقعی (دیتاپروسسینگ، لاگ‌ها، ورودی کاربر)،
علاوه بر حذف مقادیر تکراری و None، حفظ ترتیب عناصر هم اهمیت دارد.

در این حالت استفاده از set مناسب نیست، چون ترتیب را از بین می‌برد.
راه‌حل تمیز و پایتونیک، استفاده از dict.fromkeys است:

data = [1, 2, None, 3, 2, None, 4, 1]

clean_data = list(dict.fromkeys(x for x in data if x is not None))

print(clean_data)

📌 خروجی:
[1, 2, 3, 4]


🔍 مزایا
. ترتیب لیست حفظ می‌شود
. بدون حلقه‌ی دستی
. مناسب پیش‌پردازش دیتا

⚠️ نکته:
این روش از پایتون 3.7 به بعد کاملاً قابل اعتماد است (ترتیب دیکشنری حفظ می‌شود).

#fromkeys | #dict | #list | #none | @LearnPythonIcy
✔️ گروه‌بندی آیتم‌ها در پایتون با defaultdict

در بسیاری از سناریوهای واقعی
(دیتاپروسسینگ، گزارش‌گیری، لاگ‌ها، دسته‌بندی داده‌ها)،
نیاز داریم آیتم‌ها را بر اساس یک کلید مشخص گروه‌بندی کنیم.
روش‌های معمول با if و in کد را شلوغ می‌کنند.
راه‌حل پایتونیک و تمیز: استفاده از defaultdict.
from collections import defaultdict

data = [
("apple", "fruit"),
("carrot", "vegetable"),
("banana", "fruit"),
("spinach", "vegetable"),
]

grouped = defaultdict(list)

for item, category in data:
grouped[category].append(item)

print(dict(grouped))

📌 خروجی:
{
'fruit': ['apple', 'banana'],
'vegetable': ['carrot', 'spinach']
}


🔍 مزایا
. کد خوانا و کوتاه
. بدون نیاز به چک‌کردن وجود کلید
. مناسب برای دسته‌بندی دیتا و گزارش‌ها

⚠️ نکته: defaultdict مقدار پیش‌فرض می‌سازد،
پس اگر نوع داده اشتباه انتخاب شود، ممکن است باگ پنهان ایجاد کند.

#defaultdict | #collections | #python | #dataprocessing | @LearnPythonIcy
اول بگوو خروجی این کد چیه؟🤨



🧠 Python Mutability Trick — چرا جواب این عجیب میشه؟

کدی که می‌بینی ساده به‌نظر میاد، ولی پشتش یکی از مهم‌ترین مفاهیم پایتون قایمه:
لیست mutable هست و عمل ضرب روی لیست، فقط referenceها رو تکثیر می‌کنه، نه لیست جدید!
x = [[]]
y = x * 3
y[0].append(1)
print(len(y[1]))

📌 نتیجه؟
چاپ می‌کنه: 1

چــــرا؟
چون x[0] یک لیست خالیه و وقتی می‌گی x * 3 پایتون همون یک لیست رو سه بار اشاره میده.
پس y[0]، y[1] و y[2] همگی در اصل یک لیست مشترک هستن.
هر تغییری روی یکی، روی همش اعمال میشه.

🔥 نکته تستیِ پست:

هر وقت تو پایتون لیست رو ضرب کردی، بدون copy چطور می‌تونی از این دام فرار کنی؟

جواب 👇
y = [list(x[0]) for _ in range(3)]


#تست_تایم | @learnpythonicy
دقت در محاسبات عددی (Floating vs Decimal vs Fraction)

در اغلب زبان‌های برنامه‌نویسی، اعداد اعشاری از نوع Floating-point به‌صورت دودویی در حافظه ذخیره می‌شوند.
این یعنی در بسیاری از محاسبات، با مقادیر تقریبی سروکار داریم، نه عدد دقیق.

برای افزایش دقت:

می‌توان از Decimal استفاده کرد که خطای اعشاری را تا حد زیادی کاهش می‌دهد،

اما حتی Decimal هم در برخی سناریوهای خاص کاملاً بی‌نقص نیست.

📌 وقتی دقت ۱۰۰٪ اهمیت دارد (مثل محاسبات مالی، آماری یا ریاضی دقیق)،
بهترین انتخاب Fraction است.

که Fraction عدد را به‌صورت کسر منطقی (صورت/مخرج) ذخیره می‌کند، نه اعشار تقریبی؛
در نتیجه محاسبات:
. دقیق
. قابل پیش‌بینی
. بدون خطای اعشاری
انجام می‌شوند.

خلاصه‌ی انتخاب

float → سریع ولی تقریبی

Decimal → دقیق‌تر، مناسب محاسبات حساس

Fraction → دقیق‌ترین گزینه برای محاسبات ایده‌آل


🧪 مثال
from decimal import Decimal
from fractions import Fraction

# float
print(0.1 + 0.2)
# خروجی: 0.30000000000000004

# Decimal
print(Decimal("0.1") + Decimal("0.2"))
# خروجی: 0.3

# Fraction
print(Fraction(1, 10) + Fraction(2, 10))
# خروجی: 3/10

📌 نکته مهم:

float
به‌خاطر نمایش دودویی دچار خطا می‌شود.

Decimal
باید با رشته (string) ساخته شود.

Fraction
نتیجه را دقیق و بدون خطا نگه می‌دارد


#numbers | #precision | #FloatingPoint | #Decimal | #Fraction | @Learnpythonicy
2
کار با فایل‌های YAML در Python با کتابخانه PyYAML

کتابخانه PyYAML امکان کار آسان و مؤثر با فایل‌های YAML (YAML Ain’t Markup Language) را فراهم می‌کند. این فرمت معمولاً برای پیکربندی‌ها، تنظیمات و تبادل داده‌های ساختاریافته استفاده می‌شود.

import yaml

# داده‌ای که می‌خواهیم در فایل ذخیره کنیم
data_to_write = {'name': 'علی', 'age': 25, 'city': 'تهران'}

# نوشتن داده در فایل YAML
with open('example.yaml', 'w') as file:
yaml.dump(data_to_write, file, default_flow_style=False)

# خواندن داده از فایل YAML
with open('example.yaml', 'r') as file:
loaded_data = yaml.safe_load(file)
print(f"داده‌های بارگذاری شده: {loaded_data}")


خروجی فایل example.yaml:

age: 25
city: تهران
name: علی


در این مثال، ما دیکشنری data_to_write را در فایل example.yaml ذخیره کرده و سپس داده‌ها را دوباره در متغیر loaded_data بارگذاری می‌کنیم.

کتابخانه PyYAML ابزار ساده و خوانایی برای کار با داده‌های YAML در Python فراهم می‌کند. چه برای ذخیره پیکربندی‌ها، چه تبادل داده‌های ساختاریافته، PyYAML باعث می‌شود کد شما خوانا و آسان برای استفاده باشد. 🙂‍↔️

#yaml | #pyyaml | @learnpythonicy
این تست واقعاً ذهن آدمو درگیر می‌کنه 😈

اول فکر کن خروجی این کد چیه؟ 🤯 و بعد توضیحات و بخون!



Output: [[1, 3], [2], [1, 3]]

چرا اینطور شد

- خط ۲: append روی لیست مشترک، همه رو [1] می‌کنه
- خط ۳: x[1] + [2] یه لیست جدیــد می‌سازه و به x[1] نسبت داده می‌شه ← دیگه با بقیه مشترک نیست، میشه [2]
- خط ۴: extend روی لیست مشترک (که هنوز x[0] و x[2] بهش وصله) عدد ۳ رو اضافه می‌کنه ← هر دو می‌شن [1, 3]

🔥نکته تستیِ پست
عملگر + همیشه یه لیست جدید می‌سازه، در حالی که append و extend روی لیست موجود تغییر اعمال می‌کنند!

🎯 سوال
اگه به جای x[1] = x[1] + [2] می‌نوشتیم x[1].append(2) چی میشد؟ 🤔👇

#تست_تایم | @learnpythonicy
⛔️🚫⛔️🚫⛔️🚫⛔️🚫

. دوست دارید پست‌ها چه مدلی باشه؟
. تو چه حیطه‌ای از پایتون؟
. در چه سطحی باشه؟
و...
پیشنهاد و نظراتتون و دریغ نکنید از من! 💝🙏

کامنت کنید یا ناشناس بفرستید.
@learnpythonicyBot
✔️ مدیریت فایل‌ها در پایتون با ۷ روش حرفه‌ای!

برای کار با فایل‌ها در پایتون، این تکنیک‌های کاربردی را امتحان کنید:

1️⃣ باز کردن و خواندن فایل

with open('file.txt', 'r') as f:
content = f.read()
print(content)


2️⃣ نوشتن در فایل

with open('file.txt', 'w') as f:
f.write("سلام دنیا!")


3️⃣ افزودن به فایل

with open('file.txt', 'a') as f:
f.write("\nخط جدید")


4️⃣ خواندن خط به خط

with open('file.txt', 'r') as f:
for line in f:
print(line.strip())


5️⃣ بررسی وجود فایل

import os
print(os.path.exists('file.txt')) # True یا False


6️⃣ حذف فایل

import os
os.remove('file.txt')


7️⃣ مدیریت مسیرها با pathlib

from pathlib import Path
path = Path('file.txt')
print(path.exists())
print(path.read_text())


🗝 روش ویژه: خواندن و نوشتن فایل‌های CSV با pandas

import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
df.to_csv('output.csv', index=False)


نکات طلایی


* همیشه از with برای مدیریت فایل استفاده کنید
* برای مسیرهای پیچیده از pathlib کمک بگیرید
* برای داده‌های جدولی از pandas بهره ببرید

#PythonMagic | #FileHandling | #pathlib | #pandas | @learnpythonic

> *برای ذخیره‌سازی، تحلیل داده و اتوماسیون کاربرد دارد*
✔️ کار با لیست‌ها در پایتون با ۷ روش حرفه‌ای!

برای مدیریت لیست‌ها و داده‌های متوالی، این تکنیک‌های کاربردی را امتحان کنید:

1️⃣ ایجاد لیست

fruits = ['apple', 'banana', 'cherry']
print(fruits)


2️⃣ اضافه کردن عنصر

fruits.append('orange')
print(fruits)


3️⃣ درج عنصر در موقعیت خاص

fruits.insert(1, 'kiwi')
print(fruits)


4️⃣ حذف عنصر

fruits.remove('banana')
print(fruits)


5️⃣ دسترسی به عناصر با ایندکس

print(fruits[0])  # اولین عنصر
print(fruits[-1]) # آخرین عنصر


6️⃣ مرتب‌سازی لیست

numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers)


7️⃣ لیست‌ها با فهم لیست (List Comprehension)

squares = [x**2 for x in range(5)]
print(squares)


🗝 روش ویژه: تبدیل لیست به آرایه NumPy

import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr * 2)


نکات طلایی

* برای اضافه و حذف عنصر از append و remove استفاده کنید
* List comprehension کد شما را کوتاه و خواناتر می‌کند
* برای محاسبات عددی بزرگ، لیست‌ها را به NumPy array تبدیل کنید

#PythonMagic | #NumPy | #List | @learnpythonicy
1
✔️ 10 Python Set Tricks You Should Know! 🐍


1️⃣ ساخت Set یکتا از لیست
unique_items = set([1, 2, 2, 3, 4])


2️⃣ افزودن آیتم
my_set.add(5)


3️⃣ حذف آیتم بدون خطا
my_set.discard(10)  # Error نمی‌دهد


4️⃣ اجتماع دو مجموعه (Union)
result = set1 | set2


5️⃣ اشتراک دو مجموعه (Intersection)
common = set1 & set2


6️⃣ تفاضل مجموعه‌ها (Difference)
diff = set1 - set2


7️⃣ بررسی زیرمجموعه بودن
if set1 <= set2:
print("Subset")


8️⃣ حذف آیتم تصادفی
item = my_set.pop()


9️⃣ ساخت Set Comprehension
squares = {x**2 for x in range(5)}


🔟 حذف آیتم‌های تکراری از رشته
unique_chars = set("programming")


> ⚠️ ست ها(set) فوق‌العاده سریع هستند (O(1) average lookup)، اما ترتیب را حفظ نمی‌کنند!


#Set | #PythonTricks | #DataStructures | @LearnPythonicy

👇 بیشتر از کدوم عملیات Set در پروژه‌هات استفاده می‌کنی؟
✔️ 10 Python Async & Concurrency Tricks You Should Know! 🐍


1️⃣ اجرای تابع async
import asyncio

async def main():
print("Hello Async")

asyncio.run(main())


2️⃣ اجرای همزمان چند Task
async def task(n):
await asyncio.sleep(1)
return n

results = await asyncio.gather(task(1), task(2))


3️⃣ ایجاد Task در پس‌زمینه
task = asyncio.create_task(task(3))


4️⃣ محدود کردن همزمانی با Semaphore
sem = asyncio.Semaphore(3)

async with sem:
await some_io()


5️⃣ Timeout برای جلوگیری از Hang
await asyncio.wait_for(task(1), timeout=2)


6️⃣ اجرای کد Blocking داخل Async
loop = asyncio.get_running_loop()
result = await loop.run_in_executor(None, blocking_func)


7️⃣ استفاده از ThreadPoolExecutor
from concurrent.futures import ThreadPoolExecutor


8️⃣ استفاده از ProcessPool برای CPU-Bound
from concurrent.futures import ProcessPoolExecutor


9️⃣ مدیریت Race Condition با Lock
lock = asyncio.Lock()

async with lock:
shared_resource += 1


🔟 Async HTTP Requests با aiohttp
import aiohttp

async with aiohttp.ClientSession() as session:
async with session.get("https://api.example.com") as resp:
data = await resp.json()


> ⚠️ نکته: Async برای I/O-Bound فوق‌العاده است، اما برای CPU-Bound از multiprocessing استفاده کن.



#AsyncIO #Concurrency #Backend #Performance #PythonTricks

👇 تو پروژه‌هات بیشتر با I/O-Bound سروکار داری یا CPU-Bound؟
سالتون پُرپول، پُرموفقیت و شادی باشه 🦦❤️
✔️ کار با لیست‌ها در پایتون با ۷ روش حرفه‌ای!

برای مدیریت لیست‌ها و داده‌های متوالی، این تکنیک‌های کاربردی را امتحان کنید:

1️⃣ ایجاد لیست

fruits = ['apple', 'banana', 'cherry']
print(fruits)

2️⃣ اضافه کردن عنصر

fruits.append('orange')
print(fruits)

3️⃣ درج عنصر در موقعیت خاص

fruits.insert(1, 'kiwi')
print(fruits)

4️⃣ حذف عنصر

fruits.remove('banana')
print(fruits)

5️⃣ دسترسی به عناصر با ایندکس

print(fruits[0]) # اولین عنصر
print(fruits[-1]) # آخرین عنصر

6️⃣ مرتب‌سازی لیست

numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers)

7️⃣ لیست‌ها با فهم لیست (List Comprehension)

squares = [x**2 for x in range(5)]
print(squares)

🗝 روش ویژه: تبدیل لیست به آرایه NumPy

import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr * 2)

#PythonMagic | #NumPy | #list | @learnpythonicy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴 چالش ۳۰ روزه Python for AI

اگر قصد ورود به دنیای هوش مصنوعی، یادگیری ماشین و Data Science را دارید، این چالش برای شماست.

در طول ۳۰ روز آینده با حل تمرین‌های روزانه:

مهارت حل مسئله با پایتون را تقویت می‌کنید

با ابزارهای Data Science آشنا می‌شوید

مدل‌های Machine Learning خود را می‌سازید

چند پروژه مناسب GitHub و رزومه خواهید داشت

مسیر چالش:

📍 هفته اول
تفکر برنامه‌نویسی و حل مسئله با Python

📍 هفته دوم
پروژه‌های کاربردی و تحلیل داده

📍 هفته سوم
ورود به Data Science با NumPy ،Pandas و Visualization

📍 هفته چهارم
ورود عملی به Machine Learning و AI

🏆 پروژه‌های پایانی:

• Student Analytics System

• Sales Data Analyzer

• Titanic Data Analysis

• House Price Prediction

🎯 بسته به میزان مشارکت، فعالیت و همراهی اعضا، سطح پروژه‌ها می‌تواند ارتقا پیدا کند و پروژه‌های پیشرفته‌تر و نزدیک‌تر به پروژه‌های واقعی AI به چالش اضافه شوند.


🎯 خروجی نهایی:

• تسلط بیشتر بر Python

• آشنایی عملی با Data Science

• ورود به Machine Learning

• چند پروژه قابل انتشار در GitHub

هر روز ساعت ۲۰ چالش جدید منتشر می‌شود.

شما تا ساعت ۱۹:۵۹ روز بعد فرصت دارید پاسخ خود را ارسال کنید.

💡 در صورت نیاز Hint ارائه خواهد شد.
💡 پاسخ کامل روز بعد همراه با چالش جدید منتشر می‌شود.

🔥 غیبت = از دست دادن زنجیره یادگیری
📢 روز یکم از چالش ۳۰ روزه Python for AI

#Day1

🎯 موضوع:
Variables + Input + Basic Calculations

سطح:

مبتدی

زمان تخمینی:
10 تا 20 دقیقه

📝 صورت مسئله:

فرض کنید می‌خواهیم اولین بخش یک Student Analytics System را طراحی کنیم.

دیتای زیر را در برنامه خود قرار دهید:

students = {
"Ali": {"credits": 70, "gpa": 17.8},
"Sara": {"credits": 95, "gpa": 18.5},
"Reza": {"credits": 40, "gpa": 15.2},
"Nima": {"credits": 120, "gpa": 18.1},
"Parsa": {"credits": 55, "gpa": 16.4},
"Arman": {"credits": 80, "gpa": 17.1},
"Mina": {"credits": 140, "gpa": 19.0},
"Ava": {"credits": 35, "gpa": 16.8},
"Yasmin": {"credits": 110, "gpa": 18.7},
"Amir": {"credits": 65, "gpa": 15.9}
}

برنامه باید:

1️⃣ نام دانشجو را از کاربر دریافت کند.

2️⃣ اطلاعات دانشجو را نمایش دهد:

- Name
- Credits Passed
- GPA
- Remaining Credits
- Progress Percentage

*فرض کنید برای فارغ‌التحصیلی به 140 واحد نیاز است.
( اگر دانشجو 140 واحد یا بیشتر گذرانده باشد:
Status: Graduated
در غیر این صورت:
Status: In Progress
)
📌 نمونه خروجی:

Enter student name: Ali

Name: Ali
Credits Passed: 70
GPA: 17.8
Remaining Credits: 70
Progress: 50%


📋 قوانین:

خروجی‌ها و نام متغیرها به زبان انگلیسی باشند.

استفاده از ChatGPT فقط برای گرفتن Hint مجاز است، نه دریافت کد کامل 🫪

💡 اگر مبتدی هستی
نگران نباش. هدف این چالش یادگیری و پیشرفت روزانه است، نه کامل بودن.

اگر به راهنمایی نیاز داشتی
راه ارتباطی فراوانه (کامنت،گروه، بات)
@learnpythonicychat
@learnpythonicyBot

مهلت ارسال پاسخ
فردا ساعت 20:00

فردا علاوه بر انتشار پاسخ رسمی، چالش Day 2 را هم میزارم.

🧡🔥 تغییرات بزرگ یک شبه اتفاق نمی‌افتند.
اگر نت دوباره ملی شد خدایی نکرده
ایتا هستیم 🧌
https://eitaa.com/learnpythonicy