201 ترفند پایتونی مخصوص حرفه ای ها
بخش اول-مقدماتی
ترفندهای کاربردی پایتون (مقدماتی تا میانرده) .
۱ تعویض مقادیر (Swap Values)
ایدهٔ اصلی: به زبان ساده، میتوانید مقادیر دو متغیر را بدون استفاده از یک متغیر موقت تعویض کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، در پایتون میتوانید چند مقدار را همزمان (tuple unpacking) جابهجا کنید؛ سمت راست کامل ارزیابی میشود و سپس به سمت چپ تخصیص میگردد، بنابراین نیازی به متغیر موقت ندارید.
کِی به درد میخوره؟
- جابهجایی سریع دو متغیر یا دو عنصر از یک لیست.
- داخل الگوریتمها (مثل مرتبسازیها) برای swap کردن عناصر.
- نوشتن کد کوتاهتر و خواناتر نسبت به روش متغیر موقت.
یه مثال سریع:
a, b = b, a
یه مثال بیشتر 1:
a, b = 10, 20
a, b = b, a
print(a, b) # 20 10
۲ لیستهای فشرده (List Comprehensions)
ایدهٔ اصلی: به زبان ساده، برای کدنویسی خوانا و مختصر میتوانید از لیستهای فشرده استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، List Comprehension راهی سریع و خوانا برای ساختن یک لیست جدید بر اساس یک iterable است. این الگو جایگزین خوبی برای حلقههای کوتاهِ append کردن است.
کِی به درد میخوره؟
- تبدیل (Transform) دادهها؛ مثل تبدیل لیست رشتهها به لیست عدد.
- فیلتر کردن (Filter) دادهها با شرط `if`.
- ساختن خروجیهای کوتاه برای گزارش یا پردازش داده.
یه مثال سریع:
squared_numbers = [x**2 for x in range(1, 11)]
یه مثال بیشتر 1:
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares) # [4, 16, 36]
۳ تخصیص چندگانه (Multiple Assignments)
ایدهٔ اصلی: به زبان ساده، میتوانید چندین متغیر را در یک خط مقداردهی کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، تخصیص چندگانه باعث میشود چند متغیر را همزمان مقداردهی کنید. این کار هم کد را کوتاهتر میکند و هم احتمال خطا را کاهش میدهد.
کِی به درد میخوره؟
- مقداردهی اولیه چند متغیر مرتبط (مثل x و y).
- دریافت چند خروجی از یک تابع (return tuple).
- باز کردن نتیجه split یا unpacking یک iterable.
یه مثال سریع:
x, y, z = 1, 2, 3
یه مثال بیشتر 1:
x, y = (12, 30)
print(x, y) # 12 30
name, age = "Alice 30".split()
print(name, int(age))
۴ باز کردن (Unpacking)
ایدهٔ اصلی: به زبان ساده، میتوانید عناصر یک لیست یا تاپل را در متغیرهای جداگانه باز کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Unpacking یعنی عناصر یک iterable (مثل list/tuple) را به چند متغیر جداگانه نسبت دهید. در پایتون امکان «باز کردن توسعهیافته» با `*` هم وجود دارد.
کِی به درد میخوره؟
- وقتی میخواهید خروجی چندتایی یک تابع را به چند متغیر بدهید.
- وقتی میخواهید ابتدا/انتها را جدا و وسط را به صورت لیست نگه دارید.
- برای خواناتر کردن کد هنگام کار با دادههای ساختاریافته.
یه مثال سریع:
numbers = [1, 2, 3]
a, b, c = numbers
یه مثال بیشتر 1:
numbers = [10, 20, 30, 40, 50]
first, *middle, last = numbers
print(first) # 10
print(middle) # [20, 30, 40]
print(last) # 50
۵ ادغام دیکشنریها (Merge Dictionaries)
ایدهٔ اصلی: به زبان ساده، ادغام دو دیکشنری در پایتون ۳.۵ به بالا.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، برای ادغام دیکشنریها چند روش دارید: unpacking با `**` (از ۳.۵+)، و عملگر اجتماع `|` (از ۳.۹+). در صورت تداخل کلیدها، مقدار دیکشنریِ سمت راست غالب میشود.
کِی به درد میخوره؟
- ادغام تنظیمات (configs) یا پارامترها با اولویتبندی.
- ترکیب چند منبع داده برای ساخت payload یا response.
- ساختن دیکشنری جدید بدون تغییر دیکشنریهای اصلی.
یه مثال سریع:
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged_dict = {**dict1, **dict2}
یه مثال بیشتر 1:
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 99, "c": 3}
# Python 3.9+
merged = dict1 | dict2
print(merged) # {'a': 1, 'b': 99, 'c': 3}
۶ عملگر سهتایی (Ternary Operator)
ایدهٔ اصلی: به زبان ساده، برای عبارات شرطی مختصر میتوانید از عملگر سهتایی استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، عملگر سهتایی در پایتون شکل کوتاهِ if/else است و زمانی خوب است که فقط «یک مقدار» را بر اساس شرط انتخاب میکنید.
کِی به درد میخوره؟
- مقداردهی یک متغیر بر اساس شرط بدون چند خط if/else.
- ساخت پیام/label بر اساس وضعیت.
- قرار دادن if/else کوتاه داخل return.
یه مثال سریع:
x = 10
result = "positive" if x > 0 else "non-positive"
یه مثال بیشتر 1:
score = 72
grade = "pass" if score >= 60 else "fail"
print(grade) # pass
۷ دیکشنری پیشفرض (Default Dictionary)
ایدهٔ اصلی: به زبان ساده، میتوانید یک دیکشنری با مقادیر پیشفرض برای کلیدهای ناموجود ایجاد کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `defaultdict` نوعی dict است که وقتی کلیدی وجود ندارد، بهصورت خودکار مقدار پیشفرض میسازد (مثل ۰ یا لیست خالی).
کِی به درد میخوره؟
- شمارش تکرارها بدون چک کردن وجود کلید.
- گروهبندی آیتمها بر اساس یک کلید (مثل دستهبندی محصولات).
- ساخت دیکشنریهای چندسطحی با کد کمتر.
یه مثال سریع:
from collections import defaultdict
d = defaultdict(int) # مقدار پیشفرض برای کلیدهای ناموجود ۰ است
یه مثال بیشتر 1:
from collections import defaultdict
words = ["hi", "hello", "hey", "hello", "hi"]
counts = defaultdict(int)
for w in words:
counts[w] += 1
print(dict(counts)) # {'hi': 2, 'hello': 2, 'hey': 1}
۸ تابع Zip
ایدهٔ اصلی: به زبان ساده، میتوانید دو یا چند لیست را با استفاده از تابع zip ترکیب کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، تابع `zip` آیتمهای چند iterable را کنار هم قرار میدهد و یک iterator از تاپلها میسازد. برای دیدن نتیجه معمولاً آن را به `list(...)` تبدیل میکنیم.
کِی به درد میخوره؟
- پیمایش موازی روی چند لیست (نامها و نمرهها).
- ساختن dict از دو لیست (کلیدها و مقادیر).
- باز کردن zip با `zip(*pairs)` برای جدا کردن ستونها.
یه مثال سریع:
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
students = list(zip(names, scores))
print(students)
# خروجی: [('Alice', 85), ('Bob', 92), ('Charlie', 78)]
یه مثال بیشتر 1:
keys = ["host", "port", "debug"]
values = ["localhost", 8000, True]
config = dict(zip(keys, values))
print(config) # {'host': 'localhost', 'port': 8000, 'debug': True}
۹ تابع Enumerate
ایدهٔ اصلی: به زبان ساده، میتوانید از enumerate برای به دست آوردن همزمان اندیس و مقدار عناصر در یک لیست استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `enumerate` هنگام پیمایش، اندیس و مقدار را با هم میدهد. این کار باعث میشود به جای range و index، کد تمیزتر و امنتری بنویسید.
کِی به درد میخوره؟
- شمارهگذاری آیتمها هنگام چاپ یا گزارش.
- پرهیز از `list.index()` که O(n) است.
- پیمایش همراه با اندیس شروع دلخواه (`start=`).
یه مثال سریع:
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
یه مثال بیشتر 1:
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
۱۰ any و all
ایدهٔ اصلی: به زبان ساده، میتوانید بررسی کنید که آیا هیچیک یا تمام عناصر در یک دنباله شرطی را برآورده میکنند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `any` میگوید آیا حداقل یکی از شرطها True است؛ و `all` بررسی میکند آیا همه True هستند. هر دو lazy هستند و در صورت امکان زود متوقف میشوند.
کِی به درد میخوره؟
- اعتبارسنجی ورودیها (همه مثبت باشند، همه رشته باشند، ...).
- بررسی وجود یک حالت خاص در دادهها.
- نوشتن شرطهای جمعی بدون حلقه دستی.
یه مثال سریع:
numbers = [2, 4, 6, 7, 8]
any_even = any(x % 2 == 0 for x in numbers)
all_even = all(x % 2 == 0 for x in numbers)
یه مثال بیشتر 1:
values = ["admin", "editor", "viewer"]
has_admin = any(role == "admin" for role in values)
all_str = all(isinstance(role, str) for role in values)
print(has_admin) # True
print(all_str) # True
۱۱ تابع تکخطی (One-Liner Function)
ایدهٔ اصلی: به زبان ساده، با استفاده از لامبدا (lambda) توابع تکخطی ایجاد کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، lambda یک تابع بینام و کوتاه است. برای کارهای خیلی ساده (بهخصوص به عنوان key یا callback) مناسب است.
کِی به درد میخوره؟
- به عنوان `key=` در sort/max/min.
- در map/filter برای عملیات کوچک.
- برای callbackهای کوتاه.
یه مثال سریع:
square = lambda x: x ** 2
یه مثال بیشتر 1:
people = [{"name": "Ali", "age": 20}, {"name": "Sara", "age": 18}]
sorted_people = sorted(people, key=lambda p: p["age"])
print(sorted_people)
۱۲ filter و map
ایدهٔ اصلی: به زبان ساده، برای عملیات فشرده و گویای لیست میتوانید از filter و map استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، توابع `map` و `filter` معمولاً iterator برمیگردانند. در خیلی از پروژهها list comprehension خواناتر است، ولی map/filter برای pipeline و lazy evaluation هم کاربرد دارند.
کِی به درد میخوره؟
- تبدیل و فیلتر کردن دادهها به صورت زنجیرهای.
- استفاده از توابع آماده (مثل `str.strip`) روی لیستها.
- کاهش مصرف حافظه با lazy evaluation.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
evens = list(filter(lambda x: x % 2 == 0, numbers))
squared = list(map(lambda x: x ** 2, numbers))
یه مثال بیشتر 1:
numbers = [1, 2, 3, 4, 5, 6]
squares = list(map(lambda x: x*x, numbers))
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(squares)
print(evens)
۱۳ تابع sorted
ایدهٔ اصلی: به زبان ساده، میتوانید یک لیست را مرتب کنید در حالی که لیست اصلی دستنخورده باقی بماند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `sorted` یک لیست جدیدِ مرتبشده برمیگرداند و ورودی را تغییر نمیدهد. با `key=` معیار مرتبسازی را تعیین کنید و با `reverse=True` ترتیب را برعکس کنید.
کِی به درد میخوره؟
- مرتبسازی برای نمایش یا گزارش.
- مرتب کردن بر اساس فیلد/کلید خاص.
- حفظ لیست اصلی و ساخت نسخه مرتبشده.
یه مثال سریع:
numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers)
یه مثال بیشتر 1:
words = ["python", "go", "javascript", "c"]
by_len = sorted(words, key=len)
print(by_len)
۱۴ مقایسه زنجیرهای (Chain Comparison)
ایدهٔ اصلی: به زبان ساده، مقایسه زنجیرهای برای کد تمیزتر.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، مقایسه زنجیرهای مثل `0 < x < 20` خواناتر است و از تکرار `x` جلوگیری میکند. این الگو برای چک کردن بازهها عالی است.
کِی به درد میخوره؟
- بررسی بازهها (range checks) برای نمره/سن/دما و ...
- شرطهای ساده و خوانا در if.
- کاهش خطای منطقی در شرطهای چندبخشی.
یه مثال سریع:
x = 10
if 0 < x < 20:
print("x is in the range (0, 20)")
یه مثال بیشتر 1:
x = 5
if 1 <= x <= 10:
print("x in [1,10]")
۱۵ دیکشنریهای فشرده (Dictionary Comprehensions)
ایدهٔ اصلی: به زبان ساده، برای ساخت مختصر دیکشنری میتوانید از دیکشنریهای فشرده استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Dictionary Comprehension برای ساخت سریع dict از iterableها مفید است و شبیه list comprehension عمل میکند.
کِی به درد میخوره؟
- ساخت mapping سریع (مثلاً نام → طول نام).
- فیلتر کردن آیتمها هنگام ساخت dict.
- ساخت dict جدید بدون تغییر dict اصلی.
یه مثال سریع:
squared_dict = {x: x**2 for x in range(1, 11)}
یه مثال بیشتر 1:
words = ["hi", "hello", "hey"]
lengths = {w: len(w) for w in words}
print(lengths)
۱۶ zip(*reversed()) برای جابهجایی (Transpose) یک ماتریس
ایدهٔ اصلی: به زبان ساده، میتوانید یک ماتریس را با استفاده از توابع zip و reversed جابهجا کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ترکیب `reversed` و `zip(*)` در ماتریسهای کوچک کاربردی است. دقت کنید: `zip(*matrix)` ترانهاده میدهد؛ ولی `zip(*reversed(matrix))` چرخش ۹۰ درجه ساعتگرد میسازد.
کِی به درد میخوره؟
- چرخش/ترانهاده کردن ماتریسهای کوچک در مسائل الگوریتمی.
- تبدیل دادههای row-based به column-based.
- کارهای سریع بدون NumPy.
یه مثال سریع:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 1) ترانهاده (Transpose) واقعی:
transposed = [list(row) for row in zip(*matrix)]
print(transposed)
# خروجی: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
# 2) چرخش 90 درجه ساعتگرد (Rotate 90° clockwise):
rotated = [list(row) for row in zip(*reversed(matrix))]
print(rotated)
# خروجی: [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
۱۷ set برای عناصر منحصر به فرد
ایدهٔ اصلی: به زبان ساده، برای به دست آوردن عناصر منحصر به فرد میتوانید از یک لیست از set استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، تبدیل لیست به `set` راه سریع حذف تکراریهاست؛ اما `set` ترتیب را تضمین نمیکند. اگر ترتیب مهم است، باید روش دیگری استفاده کنید.
کِی به درد میخوره؟
- حذف تکراریها در دادههای خام.
- چک کردن عضویت سریعتر نسبت به list.
- محاسبه اشتراک/اجتماع/تفاضل مجموعهها.
یه مثال سریع:
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique_numbers = list(set(numbers))
یه مثال بیشتر 1:
numbers = [3, 1, 3, 2, 1]
unique_in_order = list(dict.fromkeys(numbers))
print(unique_in_order) # [3, 1, 2]
۱۸ collections.Counter
ایدهٔ اصلی: به زبان ساده، برای شمارش تعداد تکرار عناصر در یک لیست میتوانید از Counter استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `collections.Counter` برای شمارش فراوانی آیتمها ساخته شده و امکاناتی مثل `most_common` دارد.
کِی به درد میخوره؟
- شمارش کلمات/حروف/آیتمها.
- یافتن پرتکرارترینها.
- ساخت آمار سریع بدون حلقهنویسی زیاد.
یه مثال سریع:
from collections import Counter
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
number_counts = Counter(numbers) # خروجی: Counter({4: 4, 3: 3, 2: 2, 1: 1})
یه مثال بیشتر 1:
from collections import Counter
text = "banana"
c = Counter(text)
print(c.most_common(2)) # [('a', 3), ('n', 2)]
۱۹ sum با مقدار اولیه
ایدهٔ اصلی: به زبان ساده، برای جمع مقادیر با یک مقدار اولیه میتوانید از sum استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `sum(iterable, start)` از مقدار `start` شروع میکند. برای عددها مناسب است، اما برای رشتهها بهتر است از join استفاده کنید.
کِی به درد میخوره؟
- جمع کردن اعداد با offset اولیه.
- جمع کردن خروجی generator بدون ساخت لیست.
- محاسبه مجموع امتیازها/وزنها.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
sum_with_start = sum(numbers, 10) # نتیجه: 25 (10 + 1 + 2 + 3 + 4 + 5)
یه مثال بیشتر 1:
numbers = [1, 2, 3]
print(sum(numbers, 10)) # 16
print(sum(x*x for x in range(1, 5))) # 30
۲۰ collections.defaultdict با لیست
ایدهٔ اصلی: به زبان ساده، میتوانید از defaultdict با یک لیست به عنوان سازنده پیشفرض استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `defaultdict` نوعی dict است که وقتی کلیدی وجود ندارد، بهصورت خودکار مقدار پیشفرض میسازد (مثل ۰ یا لیست خالی).
کِی به درد میخوره؟
- شمارش تکرارها بدون چک کردن وجود کلید.
- گروهبندی آیتمها بر اساس یک کلید (مثل دستهبندی محصولات).
- ساخت دیکشنریهای چندسطحی با کد کمتر.
یه مثال سریع:
from collections import defaultdict
colors = [("apple", "red"), ("banana", "yellow"), ("cherry", "red"), ("orange", "orange")]
color_dict = defaultdict(list)
for fruit, color in colors:
color_dict[color].append(fruit)
# خروجی: {'red': ['apple', 'cherry'], 'yellow': ['banana'], 'orange': ['orange']}
یه مثال بیشتر 1:
from collections import defaultdict
words = ["hi", "hello", "hey", "hello", "hi"]
counts = defaultdict(int)
for w in words:
counts[w] += 1
print(dict(counts)) # {'hi': 2, 'hello': 2, 'hey': 1}
۲۱ عبارت with برای کار با فایلها
ایدهٔ اصلی: به زبان ساده، برای مدیریت تمیزتر فایلها میتوانید از عبارت with استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `with` تضمین میکند که فایل/منبع حتی اگر خطا رخ دهد هم بسته میشود. این بهترین روش کار با فایلهاست.
کِی به درد میخوره؟
- خواندن/نوشتن فایل بدون فراموش کردن close.
- کار با منابعی که cleanup میخواهند (lock/connection).
- نوشتن کد مقاوم در برابر خطا.
یه مثال سریع:
with open("file.txt", "r") as file:
content = file.read()
# نیازی به بستن دستی فایل نیست، این کار به طور خودکار توسط بلوک 'with' انجام میشود.
یه مثال بیشتر 1:
with open("output.txt", "w", encoding="utf-8") as f:
f.write("سلام دنیا")
۲۲ isinstance برای بررسی نوع
ایدهٔ اصلی: به زبان ساده، میتوانید به جای استفاده از type ، برای بررسی نوع از isinstance استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، با `isinstance` میتوانید نوع یک متغیر را چک کنید. این روش نسبت به `type(x) == ...` بهتر است چون وراثت را هم لحاظ میکند.
کِی به درد میخوره؟
- اعتبارسنجی نوع ورودی توابع.
- پشتیبانی از چند نوع مجاز (tuple از typeها).
- نوشتن کد منعطفتر در برابر subclassها.
یه مثال سریع:
if isinstance(value, int):
# کاری را با یک مقدار صحیح انجام بده
یه مثال بیشتر 1:
value = 3.14
if isinstance(value, (int, float)):
print("number")
۲۳ وراثت چندگانه (Multiple Inheritance)
ایدهٔ اصلی: به زبان ساده، برای ایجاد سلسلهمراتب کلاسی انعطافپذیر میتوانید از وراثت چندگانه استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، وراثت چندگانه در پایتون با MRO (ترتیب حل متدها) کنترل میشود. ترکیب mixinها کاربرد رایج آن است.
کِی به درد میخوره؟
- ساخت mixinهای کوچک و ترکیب رفتارها.
- اشتراکگذاری قابلیتهای عمومی بین چند کلاس.
- الگوهای فریمورکی (در حد نیاز).
یه مثال سریع:
class A:
def method(self):
print("Method from class A")
class B:
def method(self):
print("Method from class B")
class C(A, B):
pass
instance = C()
instance.method() # خروجی: "Method from class A"
یه مثال بیشتر 1:
class A:
def hello(self):
return "A"
class B:
def hello(self):
return "B"
class C(A, B):
pass
print(C().hello()) # A
۲۴ دکوراتورها (Decorators)
ایدهٔ اصلی: به زبان ساده، دکوراتورها به شما اجازه میدهند رفتار توابع یا متدها را تغییر داده یا بهبود ببخشید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، دکوراتورها به شما اجازه میدهند رفتار مشترک را بدون دستکاری منطق اصلی تابع اضافه کنید (مانند لاگگیری، زمانسنجی، کش).
کِی به درد میخوره؟
- Timing و profiling سریع توابع.
- Authorization و validation.
- Caching با `functools.lru_cache` یا دکوراتورهای سفارشی.
یه مثال سریع:
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Something is happening before the function is called.")
result = func(*args, **kwargs)
print("Something is happening after the function is called.")
return result
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
یه مثال بیشتر 1:
import time
from functools import wraps
def timing(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} took {end - start:.6f}s")
return result
return wrapper
@timing
def work():
return sum(range(100000))
work()
۲۵ functools.partial
ایدهٔ اصلی: به زبان ساده، برای ایجاد توابع با آرگومانهای ثابت میتوانید از functools.partial استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `functools.partial` برخی آرگومانها را از قبل مقداردهی میکند و یک تابع جدید میسازد. برای ساخت توابع تخصصی از توابع عمومی مفید است.
کِی به درد میخوره؟
- ساخت wrapperهای ساده بدون نوشتن def جدید.
- فیکس کردن پارامترهای تکراری در callbackها.
- کاهش تکرار هنگام استفاده از توابع عمومی.
یه مثال سریع:
import functools
def power(base, exponent):
return base ** exponent
square = functools.partial(power, exponent=2)
cube = functools.partial(power, exponent=3)
print(square(5)) # خروجی: 25
print(cube(5)) # خروجی: 125
یه مثال بیشتر 1:
from functools import partial
def power(base, exp):
return base ** exp
square = partial(power, exp=2)
cube = partial(power, exp=3)
print(square(5)) # 25
print(cube(2)) # 8
۲۶ collections.namedtuple
ایدهٔ اصلی: به زبان ساده، با استفاده از namedtuple کلاسهای ساده با فیلدهای نامگذاری شده ایجاد کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `namedtuple` مثل tuple است ولی فیلدهای نامدار دارد. سبک و سریع است و خوانایی را بالا میبرد.
کِی به درد میخوره؟
- مدلکردن دادههای ساده مثل Point یا RGB.
- خروجی چندتایی از تابع با نامهای واضح.
- جایگزین سبک برای کلاسهای خیلی ساده.
یه مثال سریع:
from collections import namedtuple
Person = namedtuple("Person", ["name", "age"])
person = Person("Alice", 30)
print(person.name) # خروجی: "Alice"
print(person.age) # خروجی: 30
یه مثال بیشتر 1:
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(2, 3)
print(p.x, p.y)
print(p._asdict())
۲۷ globals() و locals()
ایدهٔ اصلی: به زبان ساده، میتوانید به متغیرهای سراسری و محلی به صورت پویا دسترسی پیدا کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `globals()` و `locals()` دیکشنری فضای نام را میدهند. برای دیباگ و کارهای پویا مفیدند، ولی استفاده زیاد در کدهای معمولی توصیه نمیشود.
کِی به درد میخوره؟
- دیباگ و مشاهده متغیرهای موجود.
- نوشتن ابزارهای آموزشی/تحلیلی.
- پیادهسازی سیستمهای پویا با طراحی مناسب.
یه مثال سریع:
x = 10
def my_function():
y = 20
print(locals()) # خروجی: {'y': 20}
print(globals()['x']) # خروجی: 10
my_function()
یه مثال بیشتر 1:
x = 1
def demo():
y = 2
print("locals:", locals())
print("x in globals:", "x" in globals())
demo()
۲۸ الحاق لیستها (List Concatenation)
ایدهٔ اصلی: به زبان ساده، برای الحاق لیستها میتوانید از + استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، برای اتصال لیستها چند راه دارید: `+` (ساخت لیست جدید)، `extend` (تغییر درجا)، و `itertools.chain` (lazy). انتخاب درست به نیاز شما بستگی دارد.
کِی به درد میخوره؟
- ترکیب دو لیست کوچک با `+`.
- اضافه کردن چند آیتم به لیست موجود با `extend`.
- پیمایش روی چند iterable بدون ساخت لیست جدید با `itertools.chain`.
یه مثال سریع:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
concatenated_list = list1 + list2 # خروجی: [1, 2, 3, 4, 5, 6]
یه مثال بیشتر 1:
a = [1, 2]
b = [3, 4]
print(a + b) # [1, 2, 3, 4]
a.extend(b)
print(a) # [1, 2, 3, 4]
۲۹ قالببندی رشته (String Formatting)
ایدهٔ اصلی: به زبان ساده، برای قالببندی رشته میتوانید از f-string (پایتون ۳.۶ به بالا) یا str.format استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، f-string (پایتون ۳.۶+) معمولاً خواناتر است و از format specifierها پشتیبانی میکند. برای عددها و تاریخها میتوانید قالبدهی دقیق انجام دهید.
کِی به درد میخوره؟
- ساخت پیام برای لاگها و خروجی CLI.
- نمایش عدد با اعشار/درصد/جداکننده هزار.
- فرمت کردن تاریخ و زمان برای UI یا فایل.
یه مثال سریع:
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
# خروجی: "My name is Alice and I am 30 years old."
print("My name is {} and I am {} years old.".format(name, age))
# خروجی: "My name is Alice and I am 30 years old."
یه مثال بیشتر 1:
pi = 3.1415926
print(f"{pi:.2f}") # 3.14
price = 1250000
print(f"{price:,}") # 1,250,000
۳۰ try , except , و else
ایدهٔ اصلی: به زبان ساده، برای مدیریت خطای آموزندهتر میتوانید از try ، except و else استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، try/except برای مدیریت خطاست. `else` فقط وقتی اجرا میشود که خطا رخ ندهد و `finally` همیشه اجرا میشود (cleanup).
کِی به درد میخوره؟
- مدیریت خطاهای قابل پیشبینی (مثل تبدیل نوع، فایل پیدا نشدن).
- جلوگیری از کرش و ارائه پیام مناسب.
- پاکسازی منابع در finally.
یه مثال سریع:
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
else:
print(f"Result: {result}")
یه مثال بیشتر 1:
try:
x = int("42")
except ValueError:
print("عدد نامعتبر است")
else:
print("عدد معتبر:", x)
finally:
print("این بخش همیشه اجرا میشود")
۳۱ collections.deque
ایدهٔ اصلی: به زبان ساده، برای افزودن و حذف کارآمد و امن در محیط چندنخی (thread-safe) میتوانید از هر دو انتهای یک صف، از deque استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `deque` برای عملیات push/pop از دو سر بسیار سریع است و برای صف/بافر عالی است. با `maxlen` میتوانید بافر محدود بسازید.
کِی به درد میخوره؟
- پیادهسازی صف یا پشته.
- ساخت sliding window.
- نگه داشتن آخرین N رویداد/لاگ در حافظه.
یه مثال سریع:
from collections import deque
queue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
queue.popleft() # خروجی: 1
یه مثال بیشتر 1:
from collections import deque
dq = deque(maxlen=3)
for i in range(1, 6):
dq.append(i)
print(dq) # deque([3, 4, 5], maxlen=3)
۳۲ به هم ریختن یک لیست (Shuffling a List)
ایدهٔ اصلی: به زبان ساده، برای به هم ریختن عناصر یک لیست میتوانید از random.shuffle استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `random.shuffle` لیست را درجا (in-place) تصادفی میکند و چیزی برنمیگرداند. برای تکرارپذیری نتایج میتوانید seed تنظیم کنید.
کِی به درد میخوره؟
- تصادفی کردن ترتیب آیتمها.
- همزدن دادهها قبل از train.
- شبیهسازی و تست.
یه مثال سریع:
import random
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)
یه مثال بیشتر 1:
import random
numbers = [1, 2, 3, 4, 5]
random.seed(42)
random.shuffle(numbers)
print(numbers)
۳۳ get دیکشنری با مقدار پیشفرض
ایدهٔ اصلی: به زبان ساده، برای دسترسی به مقادیر دیکشنری با یک مقدار پیشفرض در صورت عدم وجود کلید، میتوانید از get استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `dict.get` وقتی کلید وجود نداشته باشد مقدار پیشفرض میدهد و KeyError رخ نمیدهد. این روش برای دادههای ورودی (مثل JSON) خیلی کاربردی است.
کِی به درد میخوره؟
- خواندن امن از dictهای ورودی.
- مقداردهی پیشفرض برای کلیدهای اختیاری.
- کاهش try/exceptهای KeyError.
یه مثال سریع:
my_dict = {'a': 1, 'b': 2}
value = my_dict.get('c', 0) # خروجی: 0
یه مثال بیشتر 1:
data = {"user": {"name": "Ali"}}
name = data.get("user", {}).get("name", "Unknown")
age = data.get("user", {}).get("age", 0)
print(name) # Ali
print(age) # 0
۳۴ dir() برای صفات شیء
ایدهٔ اصلی: به زبان ساده، برای به دست آوردن لیستی میتوانید از صفات و متدهای یک شیء از dir() استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `dir()` لیستی از attributeها و متدهای یک شیء را نشان میدهد و برای کشف قابلیتها در زمان توسعه مفید است.
کِی به درد میخوره؟
- آشنایی سریع با API یک شیء/کتابخانه.
- دیباگ در REPL یا notebook.
- همراه با `help()` و `inspect` برای جزئیات بیشتر.
یه مثال سریع:
my_list = [1, 2, 3]
attributes = dir(my_list)
print(attributes)
یه مثال بیشتر 1:
obj = "hello"
print("upper" in dir(obj)) # True
۳۵ sys.argv برای آرگومانهای خط فرمان
ایدهٔ اصلی: به زبان ساده، با استفاده از sys.argv به آرگومانهای خط فرمان دسترسی پیدا کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `sys.argv` آرگومانهای خط فرمان را میدهد. برای CLIهای حرفهایتر از `argparse` یا کتابخانههایی مثل `typer` استفاده کنید.
کِی به درد میخوره؟
- نوشتن اسکریپتهای ساده.
- دریافت مسیر فایل/آپشنها.
- ساخت ابزارهای داخلی تیم.
یه مثال سریع:
import sys
if len(sys.argv) > 1:
file_name = sys.argv[1]
print(f"File name: {file_name}")
یه مثال بیشتر 1:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("file")
parser.add_argument("--verbose", action="store_true")
args = parser.parse_args()
print("file:", args.file)
print("verbose:", args.verbose)
۳۶ zip برای پیمایش موازی
ایدهٔ اصلی: به زبان ساده، برای پیمایش موازی روی چندین لیست میتوانید از zip استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، تابع `zip` آیتمهای چند iterable را کنار هم قرار میدهد و یک iterator از تاپلها میسازد. برای دیدن نتیجه معمولاً آن را به `list(...)` تبدیل میکنیم.
کِی به درد میخوره؟
- پیمایش موازی روی چند لیست (نامها و نمرهها).
- ساختن dict از دو لیست (کلیدها و مقادیر).
- باز کردن zip با `zip(*pairs)` برای جدا کردن ستونها.
یه مثال سریع:
names = ["Alice", "Bob", "Charlie"]
ages = [30, 25, 35]
for name, age in zip(names, ages):
print(f"{name} is {age} years old.")
یه مثال بیشتر 1:
keys = ["host", "port", "debug"]
values = ["localhost", 8000, True]
config = dict(zip(keys, values))
print(config) # {'host': 'localhost', 'port': 8000, 'debug': True}
۳۷ بررسی عضویت (Check for Membership)
ایدهٔ اصلی: به زبان ساده، میتوانید بررسی کنید که آیا یک عنصر در یک لیست یا دیکشنری وجود دارد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، عملگر `in` برای بررسی عضویت استفاده میشود. از نظر عملکردی، جستجو در `set` و `dict` معمولاً سریعتر از `list` است (میانگین O(1)).
کِی به درد میخوره؟
- چک کردن اینکه یک کلید در dict هست یا نه.
- حذف تکراریها و چک سریع با set.
- اعتبارسنجی ورودی بر اساس whitelist.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
if 3 in numbers:
print("3 is in the list.")
my_dict = {'a': 1, 'b': 2}
if 'b' in my_dict:
print("Key 'b' exists in the dictionary.")
یه مثال بیشتر 1:
allowed = {"GET", "POST", "PUT"}
method = "POST"
print(method in allowed) # True
۳۸ عبارت pass
ایدهٔ اصلی: به زبان ساده، میتوانید از عبارت pass به عنوان یک جایگزین برای کدی که بعداً پیادهسازی خواهد شد، استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `pass` یعنی «فعلاً هیچ کاری نکن». این برای تعریف بلوکهای خالی لازم است (مثلاً بدنه کلاس/تابع که بعداً پر میشود).
کِی به درد میخوره؟
- استاب کردن تابع/کلاس در حین طراحی.
- نوشتن if/except/loop خالی (بهصورت موقت).
- وقتی به یک placeholder نیاز دارید تا سینتکس کامل شود.
یه مثال سریع:
def my_function():
# TODO: Implement this function
pass
یه مثال بیشتر 1:
def todo():
pass # TODO: implement later
class MyClass:
pass
۳۹ تابع reversed
ایدهٔ اصلی: به زبان ساده، میتوانید یک لیست یا رشته را با استفاده از reversed معکوس کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `reversed()` iterator معکوس میدهد. برای پیمایش از انتها به ابتدا مفید است و معمولاً حافظه اضافی زیادی مصرف نمیکند.
کِی به درد میخوره؟
- پیمایش از آخر به اول.
- ساخت نسخه معکوس رشته/لیست.
- الگوریتمهایی که از انتها شروع میشوند.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
reversed_numbers = list(reversed(numbers))
یه مثال بیشتر 1:
text = "abcd"
print("".join(reversed(text))) # dcba
۴۰ FizzBuzz
ایدهٔ اصلی: به زبان ساده، مسئله کلاسیک FizzBuzz با استفاده از یک لیست فشرده.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، FizzBuzz تمرین کلاسیک شرطهاست. نسخهٔ one-liner جذاب است، ولی نسخهٔ چندخطی خواناتر است.
کِی به درد میخوره؟
- تمرین شرطها و حلقهها.
- آموزش تبدیل قواعد به کد.
- تمرین list comprehension و منطق کوتاه.
یه مثال سریع:
result = ["Fizz" * (x % 3 == 0) + "Buzz" * (x % 5 == 0) or x for x in range(1, 101)]
یه مثال بیشتر 1:
result = []
for x in range(1, 16):
if x % 15 == 0:
result.append("FizzBuzz")
elif x % 3 == 0:
result.append("Fizz")
elif x % 5 == 0:
result.append("Buzz")
else:
result.append(x)
print(result)
۴۱ فیلتر کردن مقادیر False
ایدهٔ اصلی: به زبان ساده، میتوانید مقادیر False را از یک لیست با استفاده از filter حذف کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `filter(None, iterable)` همه مقادیر falsy مثل 0، ''، None، False و لیست خالی را حذف میکند.
کِی به درد میخوره؟
- پاکسازی لیست از مقادیر خالی.
- حذف None/'' قبل از پردازش.
- ساخت لیست تمیز برای ذخیره یا نمایش.
یه مثال سریع:
data = [0, 1, False, True, "", "hello", None]
filtered_data = list(filter(None, data)) # خروجی: [1, True, 'hello']
یه مثال بیشتر 1:
data = [0, 1, "", "hi", None, [], [1], False]
clean = list(filter(None, data))
print(clean) # [1, 'hi', [1]]
۴۲ ادغام دو لیست
ایدهٔ اصلی: به زبان ساده، برای ادغام دو لیست میتوانید از عملگر + یا متد extend استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، برای ادغام دو لیست میتوانید از `+` (ساخت لیست جدید) یا `extend` (درجا) استفاده کنید. انتخاب به این بستگی دارد که میخواهید لیست اول تغییر کند یا نه.
کِی به درد میخوره؟
- ترکیب دادههای دو منبع.
- اضافه کردن batch جدید داده به لیست موجود.
- ساخت لیست جدید بدون تغییر ورودیها.
یه مثال سریع:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = list1 + list2 # خروجی: [1, 2, 3, 4, 5, 6]
# یا
list1.extend(list2) # خروجی: [1, 2, 3, 4, 5, 6]
یه مثال بیشتر 1:
a = [1, 2]
b = [3, 4]
new_list = a + b
print(new_list) # [1, 2, 3, 4]
a.extend(b)
print(a) # [1, 2, 3, 4]
۴۳ عبارت if درونخطی (Inline if Statement)
ایدهٔ اصلی: به زبان ساده، برای عبارات شرطی مختصر میتوانید از if درونخطی استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، عملگر سهتایی در پایتون شکل کوتاهِ if/else است و زمانی خوب است که فقط «یک مقدار» را بر اساس شرط انتخاب میکنید.
کِی به درد میخوره؟
- مقداردهی یک متغیر بر اساس شرط بدون چند خط if/else.
- ساخت پیام/label بر اساس وضعیت.
- قرار دادن if/else کوتاه داخل return.
یه مثال سریع:
x = 10
result = "positive" if x > 0 else "non-positive"
یه مثال بیشتر 1:
score = 72
grade = "pass" if score >= 60 else "fail"
print(grade) # pass
۴۴ sum با لیست فشرده
ایدهٔ اصلی: به زبان ساده، برای انجام عملیات حسابی روی لیستها میتوانید از sum با لیست فشرده استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، List Comprehension راهی سریع و خوانا برای ساختن یک لیست جدید بر اساس یک iterable است. این الگو جایگزین خوبی برای حلقههای کوتاهِ append کردن است.
کِی به درد میخوره؟
- تبدیل (Transform) دادهها؛ مثل تبدیل لیست رشتهها به لیست عدد.
- فیلتر کردن (Filter) دادهها با شرط `if`.
- ساختن خروجیهای کوتاه برای گزارش یا پردازش داده.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
sum_squared = sum(x ** 2 for x in numbers) # خروجی: 55
یه مثال بیشتر 1:
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares) # [4, 16, 36]
۴۵ ارسال آرگومانهای چندگانه
ایدهٔ اصلی: به زبان ساده، میتوانید آرگومانهای چندگانه را با استفاده از سینتکس *args و **kwargs به یک تابع ارسال کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، با `*args` میتوانید آرگومانهای positional متغیر بگیرید و با `**kwargs` آرگومانهای نامدار. اینها برای نوشتن wrapperها و forwarding بسیار کاربردیاند.
کِی به درد میخوره؟
- نوشتن توابع عمومی که تعداد آرگومانها متغیر است.
- نوشتن wrapper/decorator که پارامترها را به تابع اصلی پاس میدهد.
- ساخت APIهای منعطف.
یه مثال سریع:
def print_args(*args):
for arg in args:
print(arg)
print_args(1, 2, 3, 4)
# خروجی:
# 1
# 2
# 3
# 4
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(key, value)
print_kwargs(a=1, b=2, c=3)
# خروجی:
# a 1
# b 2
# c 3
یه مثال بیشتر 1:
def logger(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
logger(1, 2, a=3, b=4)
۴۶ chr و ord
ایدهٔ اصلی: به زبان ساده، میتوانید کاراکترها را به کدهای اسکی (ASCII) و برعکس تبدیل کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `ord` کد یونیکد یک کاراکتر را میدهد و `chr` برعکس، از کد یونیکد کاراکتر میسازد. برای کارهای متنی/رمزگذاری ساده مفید است.
کِی به درد میخوره؟
- تبدیل کاراکتر به عدد و برعکس.
- ساختن الگوریتمهای ساده روی حروف (مثل Caesar cipher).
- کار با یونیکد و کدپوینتها.
یه مثال سریع:
char = 'A'
ascii_code = ord(char) # خروجی: 65
ascii_code = 65
char = chr(ascii_code) # خروجی: 'A'
یه مثال بیشتر 1:
ch = "A"
code = ord(ch)
print(code) # 65
print(chr(code)) # A
۴۷ all و any
ایدهٔ اصلی: به زبان ساده، میتوانید بررسی کنید که آیا تمام یا هر یک از عناصر در یک دنباله شرطی را برآورده میکنند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `any` میگوید آیا حداقل یکی از شرطها True است؛ و `all` بررسی میکند آیا همه True هستند. هر دو lazy هستند و در صورت امکان زود متوقف میشوند.
کِی به درد میخوره؟
- اعتبارسنجی ورودیها (همه مثبت باشند، همه رشته باشند، ...).
- بررسی وجود یک حالت خاص در دادهها.
- نوشتن شرطهای جمعی بدون حلقه دستی.
یه مثال سریع:
numbers = [2, 4, 6, 7, 8]
any_even = any(x % 2 == 0 for x in numbers)
all_even = all(x % 2 == 0 for x in numbers)
یه مثال بیشتر 1:
values = ["admin", "editor", "viewer"]
has_admin = any(role == "admin" for role in values)
all_str = all(isinstance(role, str) for role in values)
print(has_admin) # True
print(all_str) # True
۴۸ round
ایدهٔ اصلی: به زبان ساده، برای گرد کردن اعداد به تعداد مشخصی میتوانید از ارقام اعشار از round استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `round` گرد کردن انجام میدهد، اما دقت کنید که در پایتون «Banker’s rounding» هم وجود دارد: 2.5 به 2 و 3.5 به 4 گرد میشود.
کِی به درد میخوره؟
- گرد کردن برای نمایش (نه محاسبات مالی دقیق).
- کاهش تعداد اعشار در خروجی.
- نزدیک کردن مقدارهای float برای چاپ/گزارش.
یه مثال سریع:
number = 3.14159
rounded_number = round(number, 2) # خروجی: 3.14
یه مثال بیشتر 1:
print(round(2.5)) # 2
print(round(3.5)) # 4
print(round(2.3456, 2)) # 2.35
۴۹ الحاق و تکرار لیست
ایدهٔ اصلی: به زبان ساده، برای عملیات لیست میتوانید از الحاق ( + ) و تکرار ( * ) استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ضرب لیست (`list * n`) برای تکرار عناصر مفید است، اما برای لیستهای تو در تو میتواند دام باشد چون ارجاعها تکرار میشوند.
کِی به درد میخوره؟
- ساخت لیست اولیه با مقدار ثابت (مثل [0]*n).
- تکرار الگوها در دادههای ساده.
- ساخت بافرهای اولیه.
یه مثال سریع:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
concatenated_list = list1 + list2 # خروجی: [1, 2, 3, 4, 5, 6]
repeated_list = list1 * 3 # خروجی: [1, 2, 3, 1, 2, 3, 1, 2, 3]
یه مثال بیشتر 1:
# دام رایج: لیست دوبعدی با ضرب
matrix = [[0]*3]*2
matrix[0][0] = 99
print(matrix) # [[99, 0, 0], [99, 0, 0]] (هر دو ردیف تغییر کردند!)
# راه درست:
matrix2 = [[0]*3 for _ in range(2)]
matrix2[0][0] = 99
print(matrix2) # [[99, 0, 0], [0, 0, 0]]
۵۰ تابع map
ایدهٔ اصلی: به زبان ساده، برای اعمال یک تابع بر روی تمام عناصر یک لیست میتوانید از map استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `map` یک iterator میدهد که تابع را روی هر عنصر اعمال میکند. برای دیدن خروجی میتوانید آن را به list تبدیل کنید.
کِی به درد میخوره؟
- اعمال یک تبدیل ساده روی همه عناصر.
- زمانی که تابع آماده دارید و میخواهید pipeline بسازید.
- ترکیب با توابع استاندارد مثل `str.strip`.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
یه مثال بیشتر 1:
names = [" ali ", " sara ", " reza "]
clean = list(map(str.strip, names))
print(clean) # ['ali', 'sara', 'reza']
۵۱ max و min با تابع کلید (Key Function)
ایدهٔ اصلی: به زبان ساده، برای یافتن عنصری با بیشترین یا کمترین مقدار بر اساس یک صفت خاص، میتوانید از max و min با یک تابع کلید استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، با `max` و `min` میتوانید بزرگترین/کوچکترین مقدار را پیدا کنید. با `key=` معیار انتخاب را تغییر میدهید.
کِی به درد میخوره؟
- انتخاب بزرگترین آیتم بر اساس طول/سن/امتیاز و ...
- پیدا کردن بهترین نتیجه/بیشترین مقدار در لیست دیکشنریها.
- پیدا کردن نزدیکترین مقدار با معیار دلخواه.
یه مثال سریع:
people = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob', 'age': 25},
{'name': 'Charlie', 'age': 35}
]
oldest_person = max(people, key=lambda x: x['age'])
youngest_person = min(people, key=lambda x: x['age'])
یه مثال بیشتر 1:
words = ["hi", "hello", "hey"]
print(max(words, key=len)) # hello
۵۲ sorted با تابع کلید
ایدهٔ اصلی: به زبان ساده، برای مرتبسازی یک لیست بر اساس یک صفت خاص، میتوانید از sorted با یک تابع کلید استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `sorted` یک لیست جدیدِ مرتبشده برمیگرداند و ورودی را تغییر نمیدهد. با `key=` معیار مرتبسازی را تعیین کنید و با `reverse=True` ترتیب را برعکس کنید.
کِی به درد میخوره؟
- مرتبسازی برای نمایش یا گزارش.
- مرتب کردن بر اساس فیلد/کلید خاص.
- حفظ لیست اصلی و ساخت نسخه مرتبشده.
یه مثال سریع:
people = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob', 'age': 25},
{'name': 'Charlie', 'age': 35}
]
sorted_by_age = sorted(people, key=lambda x: x['age'])
یه مثال بیشتر 1:
words = ["python", "go", "javascript", "c"]
by_len = sorted(words, key=len)
print(by_len)
۵۳ ماژول itertools
ایدهٔ اصلی: به زبان ساده، ماژول itertools مجموعهای از ابزارها را برای کار با تکرارکنندهها (iterators) فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `itertools` ابزارهای قدرتمند برای کار با iteratorها میدهد. این ابزارها معمولاً lazy هستند و برای پردازش دادههای بزرگ مناسباند.
کِی به درد میخوره؟
- ساخت ترکیبها (combinations) و جایگشتها (permutations).
- زنجیره کردن iterableها بدون ساخت لیست جدید.
- گروهبندی دادههای مرتبشده با `groupby`.
یه مثال سریع:
import itertools
# حاصلضرب دکارتی
colors = ['red', 'blue']
sizes = ['small', 'large']
product = list(itertools.product(colors, sizes))
# خروجی: [('red', 'small'), ('red', 'large'), ('blue', 'small'), ('blue', 'large')]
# جایگشتها
letters = ['a', 'b', 'c']
perms = list(itertools.permutations(letters, 2))
# خروجی: [('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
# ترکیبها
letters = ['a', 'b', 'c']
combinations = list(itertools.combinations(letters, 2))
# خروجی: [('a', 'b'), ('a', 'c'), ('b', 'c')]
یه مثال بیشتر 1:
import itertools
for comb in itertools.combinations([1, 2, 3, 4], 2):
print(comb)
۵۴ ماژول random
ایدهٔ اصلی: به زبان ساده، ماژول random توابعی برای تولید اعداد تصادفی فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `random` برای کارهای عمومی تصادفی مناسب است. برای کارهای امنیتی (توکن/پسورد) از `secrets` استفاده کنید.
کِی به درد میخوره؟
- sample و shuffle دادهها.
- شبیهسازیهای ساده.
- تستهای قابل تکرار با seed.
یه مثال سریع:
import random
# عدد صحیح تصادفی
random_number = random.randint(1, 10)
# عدد اعشاری تصادفی
random_float = random.random() # محدوده: 0.0 <= random_float < 1.0
# انتخاب تصادفی
choices = ['apple', 'banana', 'cherry']
random_choice = random.choice(choices)
یه مثال بیشتر 1:
import random
items = [1, 2, 3, 4, 5]
print(random.choice(items))
print(random.sample(items, k=3))
۵۵ ماژول datetime
ایدهٔ اصلی: به زبان ساده، ماژول datetime کلاسهایی برای کار با تاریخ و زمان فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `datetime` برای تاریخ و زمان است. در پروژههای واقعی، timezone (مثل UTC) را جدی بگیرید تا خطاهای اختلاف ساعت رخ ندهد.
کِی به درد میخوره؟
- ثبت زمان رویدادها در لاگ.
- محاسبه بازهها با timedelta.
- فرمت کردن تاریخ برای نمایش/ذخیره.
یه مثال سریع:
import datetime
# دریافت تاریخ و زمان فعلی
current_datetime = datetime.datetime.now()
# قالببندی تاریخ
formatted_date = current_datetime.strftime('%Y-%m-%d')
# محاسبه اختلاف زمانی
date1 = datetime.datetime(2023, 1, 1)
date2 = datetime.datetime(2023, 12, 31)
time_difference = date2 - date1
یه مثال بیشتر 1:
import datetime
now = datetime.datetime.now()
print(now.isoformat(timespec="seconds"))
۵۶ collections.defaultdict برای شمارش عناصر
ایدهٔ اصلی: به زبان ساده، برای شمارش تکرار عناصر در یک لیست میتوانید از defaultdict استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `defaultdict` نوعی dict است که وقتی کلیدی وجود ندارد، بهصورت خودکار مقدار پیشفرض میسازد (مثل ۰ یا لیست خالی).
کِی به درد میخوره؟
- شمارش تکرارها بدون چک کردن وجود کلید.
- گروهبندی آیتمها بر اساس یک کلید (مثل دستهبندی محصولات).
- ساخت دیکشنریهای چندسطحی با کد کمتر.
یه مثال سریع:
from collections import defaultdict
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
number_counts = defaultdict(int)
for num in numbers:
number_counts[num] += 1
# خروجی: defaultdict(
, {1: 1, 2: 2, 3: 3, 4: 4})
یه مثال بیشتر 1:
from collections import defaultdict
words = ["hi", "hello", "hey", "hello", "hi"]
counts = defaultdict(int)
for w in words:
counts[w] += 1
print(dict(counts)) # {'hi': 2, 'hello': 2, 'hey': 1}
۵۷ collections.Counter
ایدهٔ اصلی: به زبان ساده، برای شمارش تکرار عناصر در یک لیست میتوانید از Counter استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `collections.Counter` برای شمارش فراوانی آیتمها ساخته شده و امکاناتی مثل `most_common` دارد.
کِی به درد میخوره؟
- شمارش کلمات/حروف/آیتمها.
- یافتن پرتکرارترینها.
- ساخت آمار سریع بدون حلقهنویسی زیاد.
یه مثال سریع:
from collections import Counter
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
number_counts = Counter(numbers)
# خروجی: Counter({4: 4, 3: 3, 2: 2, 1: 1})
یه مثال بیشتر 1:
from collections import Counter
text = "banana"
c = Counter(text)
print(c.most_common(2)) # [('a', 3), ('n', 2)]
۵۸ ماژول json
ایدهٔ اصلی: به زبان ساده، ماژول json به شما امکان کار با دادههای JSON را میدهد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `json` برای سریالسازی/دیسریالسازی دادهها بین Python و JSON است. با `ensure_ascii=False` خروجی فارسی خواناتر میشود.
کِی به درد میخوره؟
- تعامل با APIها.
- ذخیره تنظیمات و دادهها.
- ساخت لاگ یا خروجی قابل اشتراک.
یه مثال سریع:
import json
# تبدیل دیکشنری به JSON
data = {'name': 'Alice', 'age': 30}
json_data = json.dumps(data)
# تبدیل JSON به دیکشنری
json_data = '{"name": "Alice", "age": 30}'
data = json.loads(json_data)
یه مثال بیشتر 1:
import json
data = {"message": "سلام", "ok": True}
print(json.dumps(data, ensure_ascii=False, indent=2))
۵۹ ماژول sys
ایدهٔ اصلی: به زبان ساده، ماژول sys دسترسی به برخی متغیرهای استفاده شده یا نگهداری شده توسط مفسر پایتون را فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `sys` امکانات سطح سیستم/مفسر را میدهد: آرگومانها، مسیرها، خروج برنامه، اندازه اشیاء و ...
کِی به درد میخوره؟
- نوشتن CLIها و کنترل exit code.
- دسترسی به sys.path و تنظیم importها.
- دیباگ و بررسی حافظه با getsizeof.
یه مثال سریع:
import sys
# آرگومانهای خط فرمان
script_name = sys.argv[0]
arguments = sys.argv[1:]
# حداکثر عمق بازگشت (Recursion)
max_recursion_depth = sys.getrecursionlimit()
# پلتفرم فعلی
current_platform = sys.platform
یه مثال بیشتر 1:
import sys
print(sys.version)
print(sys.platform)
۶۰ ماژول os
ایدهٔ اصلی: به زبان ساده، ماژول os راهی برای استفاده از قابلیتهای وابسته به سیستم عامل فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `os` برای کارهای سیستمعامل مثل فایلها، پوشهها، env vars و اجرای دستورات است.
کِی به درد میخوره؟
- ساخت/حذف پوشهها و فایلها.
- خواندن متغیرهای محیطی (ENV).
- کار با مسیرها (در کنار os.path/pathlib).
یه مثال سریع:
import os
# دایرکتوری کاری فعلی
current_directory = os.getcwd()
# تغییر دایرکتوری
os.chdir('/path/to/directory')
# لیست کردن محتویات دایرکتوری
directory_contents = os.listdir()
# ایجاد دایرکتوری
os.makedirs('/path/to/new_directory')
# حذف دایرکتوری
os.rmdir('/path/to/empty_directory')
یه مثال بیشتر 1:
import os
print(os.getenv("HOME"))
print(os.listdir("."))
۶۱ ماژول pickle
ایدهٔ اصلی: به زبان ساده، ماژول pickle به شما امکان سریالسازی (serialize) اشیاء پایتون را میدهد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، pickle برای سریالسازی اشیاء پایتون است ولی **امن نیست**. داده pickle را فقط از منابع قابل اعتماد loads کنید.
کِی به درد میخوره؟
- ذخیره موقت (cache) دادهها در محیط قابل اعتماد.
- ذخیره سریع آبجکتهای پایتون برای پردازش بعدی.
- انتقال داده بین بخشهایی که به هم اعتماد دارند.
یه مثال سریع:
import pickle
# سریالسازی شیء به فایل
data = {'name': 'Alice', 'age': 30}
with open('data.pkl', 'wb') as file:
pickle.dump(data, file)
# دیسریالسازی شیء از فایل
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)
یه مثال بیشتر 1:
import pickle
data = {"a": 1}
blob = pickle.dumps(data)
print(pickle.loads(blob))
۶۲ برش لیست (List Slicing)
ایدهٔ اصلی: به زبان ساده، برای استخراج زیرلیستها میتوانید از یک لیست از برش لیست استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Slicing برای گرفتن زیرلیست یا کپی/معکوس کردن لیست بسیار کاربردی است: `list[start:stop:step]`.
کِی به درد میخوره؟
- گرفتن زیرلیست از دادهها.
- کپی سریع لیست با `[:]`.
- معکوس کردن با `[::-1]`.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
sublist = numbers[1:4] # خروجی: [2, 3, 4]
یه مثال بیشتر 1:
nums = [0, 1, 2, 3, 4, 5]
print(nums[1:4]) # [1, 2, 3]
print(nums[::2]) # [0, 2, 4]
print(nums[::-1]) # [5, 4, 3, 2, 1, 0]
۶۳ متدهای رشته (String Methods)
ایدهٔ اصلی: به زبان ساده، برای دستکاری رشتهها میتوانید از متدهای داخلی رشته استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، متدهای رشته مثل `strip`, `split`, `replace`, `startswith` و ... ابزارهای پایهای برای پاکسازی و پردازش متن هستند.
کِی به درد میخوره؟
- پاکسازی ورودی کاربر.
- پردازش دادههای متنی مثل CSV ساده.
- استخراج بخشهای مورد نیاز از متن.
یه مثال سریع:
text = "Hello, World!"
# تبدیل به حروف کوچک
lowercase_text = text.lower() # خروجی: "hello, world!"
# تبدیل به حروف بزرگ
uppercase_text = text.upper() # خروجی: "HELLO, WORLD!"
# بزرگ کردن حرف اول
capitalized_text = text.capitalize() # خروجی: "Hello, world!"
# شمارش تکرار
count = text.count('l') # خروجی: 3
# جایگزینی زیررشتهها
replaced_text = text.replace('World', 'Python') # خروجی: "Hello, Python!"
یه مثال بیشتر 1:
s = " hello world "
print(s.strip()) # "hello world"
print(s.upper()) # " HELLO WORLD "
print(s.strip().split()) # ['hello', 'world']
۶۴ متد str.join()
ایدهٔ اصلی: به زبان ساده، برای الحاق عناصر یک لیست به یک رشته واحد میتوانید از str.join() استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `str.join` بهترین روش برای چسباندن چند رشته است. از `+` در حلقهها پرهیز کنید چون کند میشود.
کِی به درد میخوره؟
- ساخت متن خروجی از لیست رشتهها.
- ترکیب خطوط برای ذخیره در فایل.
- ساخت path یا query ساده (با دقت).
یه مثال سریع:
words = ['Hello', 'World', '!']
sentence = ' '.join(words) # خروجی: "Hello World !"
یه مثال بیشتر 1:
words = ["hello", "world"]
print(" ".join(words)) # "hello world"
print("\n".join(words)) # دو خط جدا
۶۵ تابع enumerate
ایدهٔ اصلی: به زبان ساده، برای به دست آوردن همزمان اندیس و مقدار عناصر در یک لیست میتوانید از enumerate استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `enumerate` هنگام پیمایش، اندیس و مقدار را با هم میدهد. این کار باعث میشود به جای range و index، کد تمیزتر و امنتری بنویسید.
کِی به درد میخوره؟
- شمارهگذاری آیتمها هنگام چاپ یا گزارش.
- پرهیز از `list.index()` که O(n) است.
- پیمایش همراه با اندیس شروع دلخواه (`start=`).
یه مثال سریع:
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
یه مثال بیشتر 1:
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
۶۶ تابع open با عبارت with
ایدهٔ اصلی: به زبان ساده، برای مدیریت خودکار بستن فایل میتوانید از عبارت with استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `with` تضمین میکند که فایل/منبع حتی اگر خطا رخ دهد هم بسته میشود. این بهترین روش کار با فایلهاست.
کِی به درد میخوره؟
- خواندن/نوشتن فایل بدون فراموش کردن close.
- کار با منابعی که cleanup میخواهند (lock/connection).
- نوشتن کد مقاوم در برابر خطا.
یه مثال سریع:
with open("file.txt", "r") as file:
content = file.read()
# نیازی به بستن دستی فایل نیست، این کار به طور خودکار توسط بلوک 'with' انجام میشود.
یه مثال بیشتر 1:
with open("output.txt", "w", encoding="utf-8") as f:
f.write("سلام دنیا")
۶۷ is و == برای مقایسه اشیاء
ایدهٔ اصلی: به زبان ساده، برای بررسی اینکه آیا دو متغیر به یک شیء یکسان ارجاع میدهند میتوانید از is و برای مقایسه مقادیر از == استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `==` برابری مقدار (equality) را بررسی میکند، ولی `is` هویت شیء (identity) را. برای `None` باید از `is None` استفاده کنید.
کِی به درد میخوره؟
- چک کردن None به شکل استاندارد (`is None`).
- تشخیص اینکه دو reference دقیقاً به یک شیء اشاره میکنند یا نه.
- پرهیز از باگهای مقایسه identity به جای equality.
یه مثال سریع:
list1 = [1, 2, 3]
list2 = [1, 2, 3]
if list1 is list2:
print("Same object")
else:
print("Different objects")
# خروجی: "Different objects"
if list1 == list2:
print("Equal values")
else:
print("Different values")
# خروجی: "Equal values"
یه مثال بیشتر 1:
a = [1, 2]
b = [1, 2]
print(a == b) # True (مقدار برابر است)
print(a is b) # False (شیء یکسان نیست)
x = None
print(x is None) # True
۶۸ حلقه while با عبارت else
ایدهٔ اصلی: به زبان ساده، برای اجرای کد زمانی که شرط حلقه while نادرست میشود، میتوانید از else با حلقههای while استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، بخش `else` بعد از حلقه while فقط وقتی اجرا میشود که حلقه با `break` متوقف نشده باشد. این الگو برای «جستجو» مفید است.
کِی به درد میخوره؟
- جستجو در دادهها: اگر پیدا شد break، اگر نشد else.
- نوشتن الگوریتمهایی که حالت شکست/موفقیت دارند.
- کاهش نیاز به فلگهای کمکی.
یه مثال سریع:
count = 0
while count < 5:
print(count)
count += 1
else:
print("Loop finished!")
# خروجی: "0 1 2 3 4 Loop finished!"
یه مثال بیشتر 1:
n = 10
i = 1
while i <= n:
if i*i == n:
print("perfect square")
break
i += 1
else:
print("not a perfect square")
۶۹ حلقه for با عبارت else
ایدهٔ اصلی: به زبان ساده، برای اجرای کد زمانی که حلقه for بدون برخورد با عبارت break کامل میشود، میتوانید از else با حلقههای for استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، در `for ... else`، بخش else وقتی اجرا میشود که حلقه با break تمام نشده باشد. معمولاً برای جستجو/بررسی وجود یک مورد استفاده میشود.
کِی به درد میخوره؟
- پیدا کردن عدد اول یا یافتن یک عنصر خاص.
- جستجو در لیستها بدون فلگ اضافی.
- اعلام «پیدا نشد» به شکل تمیز.
یه مثال سریع:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
if fruit == "banana":
break
else:
print("No 'banana' found!")
# خروجی: "No 'banana' found!" (اگر banana در لیست نباشد)
یه مثال بیشتر 1:
n = 29
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
print("not prime")
break
else:
print("prime")
۷۰ دیکشنریهای فشرده (Dictionary Comprehensions)
ایدهٔ اصلی: به زبان ساده، برای ساخت مختصر دیکشنری میتوانید از دیکشنریهای فشرده استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Dictionary Comprehension برای ساخت سریع dict از iterableها مفید است و شبیه list comprehension عمل میکند.
کِی به درد میخوره؟
- ساخت mapping سریع (مثلاً نام → طول نام).
- فیلتر کردن آیتمها هنگام ساخت dict.
- ساخت dict جدید بدون تغییر dict اصلی.
یه مثال سریع:
squared_dict = {x: x**2 for x in range(1, 11)}
یه مثال بیشتر 1:
words = ["hi", "hello", "hey"]
lengths = {w: len(w) for w in words}
print(lengths)
۷۱ ماژول Timeit برای زمانبندی کد
ایدهٔ اصلی: به زبان ساده، برای اندازهگیری زمان اجرای کد میتوانید از ماژول timeit استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `timeit` برای بنچمارک کدهای کوچک مناسب است. به جای یکبار اجرا، چندبار اجرا میکند تا نتیجه پایدارتر شود.
کِی به درد میخوره؟
- مقایسه دو روش مختلف پیادهسازی.
- اندازهگیری دقیقتر نسبت به time.time برای تکه کدهای کوتاه.
- بهینهسازی micro-optimizationها.
یه مثال سریع:
import timeit
def my_function():
return sum(range(1000000))
execution_time = timeit.timeit(my_function, number=100)
print(f"Execution time: {execution_time} seconds")
یه مثال بیشتر 1:
import timeit
print(timeit.timeit("[x*x for x in range(1000)]", number=1000))
۷۲ else با try و except
ایدهٔ اصلی: به زبان ساده، برای مشخص کردن کدی که باید در صورت عدم بروز استثنا اجرا شود، میتوانید از else با try و except استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، try/except برای مدیریت خطاست. `else` فقط وقتی اجرا میشود که خطا رخ ندهد و `finally` همیشه اجرا میشود (cleanup).
کِی به درد میخوره؟
- مدیریت خطاهای قابل پیشبینی (مثل تبدیل نوع، فایل پیدا نشدن).
- جلوگیری از کرش و ارائه پیام مناسب.
- پاکسازی منابع در finally.
یه مثال سریع:
try:
result = 10 / 2
except ZeroDivisionError as e:
print(f"Error: {e}")
else:
print(f"Result: {result}")
یه مثال بیشتر 1:
try:
x = int("42")
except ValueError:
print("عدد نامعتبر است")
else:
print("عدد معتبر:", x)
finally:
print("این بخش همیشه اجرا میشود")
۷۳ zip و باز کردن برای پیمایش موازی
ایدهٔ اصلی: به زبان ساده، برای پیمایش موازی روی چندین لیست میتوانید از zip و باز کردن (unpacking) استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Unpacking یعنی عناصر یک iterable (مثل list/tuple) را به چند متغیر جداگانه نسبت دهید. در پایتون امکان «باز کردن توسعهیافته» با `*` هم وجود دارد.
کِی به درد میخوره؟
- وقتی میخواهید خروجی چندتایی یک تابع را به چند متغیر بدهید.
- وقتی میخواهید ابتدا/انتها را جدا و وسط را به صورت لیست نگه دارید.
- برای خواناتر کردن کد هنگام کار با دادههای ساختاریافته.
یه مثال سریع:
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}")
یه مثال بیشتر 1:
numbers = [10, 20, 30, 40, 50]
first, *middle, last = numbers
print(first) # 10
print(middle) # [20, 30, 40]
print(last) # 50
۷۴ try با finally
ایدهٔ اصلی: به زبان ساده، برای مشخص کردن کد پاکسازی که همیشه اجرا میشود، چه استثنا رخ دهد یا نه، میتوانید از finally استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
try:
# کدی که ممکن است استثنا ایجاد کند
result = 10 / 2
finally:
# کد پاکسازی که همیشه اجرا میشود
print("Cleanup")
۷۵ تابع isinstance برای بررسی نوع
ایدهٔ اصلی: به زبان ساده، میتوانید به جای استفاده از type ، برای بررسی نوع از isinstance استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، با `isinstance` میتوانید نوع یک متغیر را چک کنید. این روش نسبت به `type(x) == ...` بهتر است چون وراثت را هم لحاظ میکند.
کِی به درد میخوره؟
- اعتبارسنجی نوع ورودی توابع.
- پشتیبانی از چند نوع مجاز (tuple از typeها).
- نوشتن کد منعطفتر در برابر subclassها.
یه مثال سریع:
if isinstance(value, int):
# کاری را با یک مقدار صحیح انجام بده
یه مثال بیشتر 1:
value = 3.14
if isinstance(value, (int, float)):
print("number")
۷۶ لیست فشرده با شرط
ایدهٔ اصلی: به زبان ساده، برای فیلتر کردن عناصر در یک لیست میتوانید از لیست فشرده با شرط استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، List Comprehension راهی سریع و خوانا برای ساختن یک لیست جدید بر اساس یک iterable است. این الگو جایگزین خوبی برای حلقههای کوتاهِ append کردن است.
کِی به درد میخوره؟
- تبدیل (Transform) دادهها؛ مثل تبدیل لیست رشتهها به لیست عدد.
- فیلتر کردن (Filter) دادهها با شرط `if`.
- ساختن خروجیهای کوتاه برای گزارش یا پردازش داده.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
even_numbers = [x for x in numbers if x % 2 == 0]
یه مثال بیشتر 1:
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares) # [4, 16, 36]
۷۷ get دیکشنری با مقدار پیشفرض
ایدهٔ اصلی: به زبان ساده، برای دسترسی به مقادیر دیکشنری با یک مقدار پیشفرض در صورت عدم وجود کلید، میتوانید از get استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `dict.get` وقتی کلید وجود نداشته باشد مقدار پیشفرض میدهد و KeyError رخ نمیدهد. این روش برای دادههای ورودی (مثل JSON) خیلی کاربردی است.
کِی به درد میخوره؟
- خواندن امن از dictهای ورودی.
- مقداردهی پیشفرض برای کلیدهای اختیاری.
- کاهش try/exceptهای KeyError.
یه مثال سریع:
my_dict = {'a': 1, 'b': 2}
value = my_dict.get('c', 0) # خروجی: 0
یه مثال بیشتر 1:
data = {"user": {"name": "Ali"}}
name = data.get("user", {}).get("name", "Unknown")
age = data.get("user", {}).get("age", 0)
print(name) # Ali
print(age) # 0
۷۸ عبارت del
ایدهٔ اصلی: به زبان ساده، برای حذف عناصر میتوانید از یک لیست یا حذف متغیرها از del استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
my_list = [1, 2, 3, 4, 5]
del my_list[2] # حذف عنصر در اندیس 2
x = 10
del x # حذف متغیر 'x'
۷۹ enumerate با اندیس شروع
ایدهٔ اصلی: به زبان ساده، برای مشخص کردن مقدار اولیه اندیس، میتوانید از enumerate با اندیس شروع استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `enumerate` هنگام پیمایش، اندیس و مقدار را با هم میدهد. این کار باعث میشود به جای range و index، کد تمیزتر و امنتری بنویسید.
کِی به درد میخوره؟
- شمارهگذاری آیتمها هنگام چاپ یا گزارش.
- پرهیز از `list.index()` که O(n) است.
- پیمایش همراه با اندیس شروع دلخواه (`start=`).
یه مثال سریع:
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):
print(f"Index {index}: {fruit}")
یه مثال بیشتر 1:
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
۸۰ ماژول re برای عبارات منظم (Regular Expressions)
ایدهٔ اصلی: به زبان ساده، ماژول re به شما امکان کار با عبارات منظم را میدهد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import re
text = "Hello, World! My name is Alice."
pattern = r"Hello, (.*?)[.!]"
match = re.search(pattern, text)
if match:
name = match.group(1)
print(f"Name: {name}")
# خروجی: "Name: World"
۸۱ تابع sys.exit()
ایدهٔ اصلی: به زبان ساده، برای خروج میتوانید از اسکریپت پایتون از sys.exit() استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `sys.exit(code)` برنامه را با کد خروج مشخص خاتمه میدهد. 0 یعنی موفق، و غیرصفر معمولاً یعنی خطا.
کِی به درد میخوره؟
- خاتمه دادن به CLI در صورت ورودی نامعتبر.
- بازگرداندن exit code مناسب به سیستم/CI.
- توقف برنامه در شرایط بحرانی.
یه مثال سریع:
import sys
def my_function():
# مقداری کد
if some_condition:
sys.exit()
# کد دیگر
یه مثال بیشتر 1:
import sys
if len(sys.argv) < 2:
print("Usage: python app.py <filename>")
sys.exit(2)
print("OK")
۸۲ ماژول inspect
ایدهٔ اصلی: به زبان ساده، ماژول inspect توابعی برای بازرسی اشیاء زنده فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، با `*args` میتوانید آرگومانهای positional متغیر بگیرید و با `**kwargs` آرگومانهای نامدار. اینها برای نوشتن wrapperها و forwarding بسیار کاربردیاند.
کِی به درد میخوره؟
- نوشتن توابع عمومی که تعداد آرگومانها متغیر است.
- نوشتن wrapper/decorator که پارامترها را به تابع اصلی پاس میدهد.
- ساخت APIهای منعطف.
یه مثال سریع:
import inspect
def my_function(a, b=10, *args, c=20, **kwargs):
pass
# دریافت آرگومانهای تابع
argspec = inspect.getfullargspec(my_function)
# خروجی: FullArgSpec(args=['a', 'b'], varargs='args', varkw='kwargs', defaults=(10,), kwonlyargs=['c'], kwonlydefaults={'c': 20}, annotations={})
یه مثال بیشتر 1:
def logger(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
logger(1, 2, a=3, b=4)
۸۳ تابع open با حالتهای مختلف
ایدهٔ اصلی: به زبان ساده، برای عملیات مختلف فایل میتوانید از تابع open با حالتهای مختلف استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، حالتهای رایج open: `r` خواندن، `w` نوشتن (پاک کردن قبلی)، `a` اضافه کردن، `x` ایجاد اگر نبود، و `b` برای باینری.
کِی به درد میخوره؟
- کار با فایلهای متنی و باینری.
- ساخت فایل جدید با جلوگیری از overwrite با `x`.
- نوشتن لاگ یا append کردن داده.
یه مثال سریع:
# حالت خواندن (پیشفرض)
with open("file.txt", "r") as file:
content = file.read()
# حالت نوشتن (ایجاد فایل جدید یا بازنویسی فایل موجود)
with open("file.txt", "w") as file:
file.write("Hello, World!")
# حالت افزودن (باز کردن برای نوشتن، اما افزودن به انتهای فایل)
with open("file.txt", "a") as file:
file.write("\nGoodbye, World!")
# حالت باینری (خواندن یا نوشتن دادههای باینری)
with open("file.bin", "wb") as file:
file.write(b'\x01\x02\x03')
یه مثال بیشتر 1:
# ایجاد فایل جدید (اگر وجود داشته باشد خطا میدهد)
with open("new_file.txt", "x", encoding="utf-8") as f:
f.write("created!")
۸۴ قالببندی رشته با f-string
ایدهٔ اصلی: به زبان ساده، برای قالببندی رشته میتوانید از f-string (پایتون ۳.۶ به بالا) استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، f-string (پایتون ۳.۶+) معمولاً خواناتر است و از format specifierها پشتیبانی میکند. برای عددها و تاریخها میتوانید قالبدهی دقیق انجام دهید.
کِی به درد میخوره؟
- ساخت پیام برای لاگها و خروجی CLI.
- نمایش عدد با اعشار/درصد/جداکننده هزار.
- فرمت کردن تاریخ و زمان برای UI یا فایل.
یه مثال سریع:
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
# خروجی: "My name is Alice and I am 30 years old."
یه مثال بیشتر 1:
pi = 3.1415926
print(f"{pi:.2f}") # 3.14
price = 1250000
print(f"{price:,}") # 1,250,000
۸۵ __name__ و __main__
ایدهٔ اصلی: به زبان ساده، برای ایجاد ماژولهای قابل استفاده مجدد میتوانید از __name__ و __main__ استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، الگوی `if __name__ == '__main__':` باعث میشود فایل هم قابل import باشد و هم وقتی مستقیم اجرا شد، بخش main اجرا شود.
کِی به درد میخوره؟
- نوشتن ماژول قابل reuse.
- جلوگیری از اجرای ناخواسته کد هنگام import.
- ساخت CLI ساده در یک فایل.
یه مثال سریع:
# my_module.py
def my_function():
print("Hello from my_function!")
if __name__ == "__main__":
# زمانی اجرا میشود که اسکریپت مستقیماً اجرا شود
my_function()
یه مثال بیشتر 1:
def main():
print("Run as script")
if __name__ == "__main__":
main()
۸۶ تابع range
ایدهٔ اصلی: به زبان ساده، برای تولید دنبالهای میتوانید از اعداد از تابع range استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `range` یک sequence تنبل است و لیست نمیسازد (memory efficient). `range(stop)` از 0 شروع میکند و stop را شامل نمیشود.
کِی به درد میخوره؟
- حلقههای شمارشی.
- ساخت دنبالهها بدون مصرف حافظه زیاد.
- تولید اندیسها با step مشخص.
یه مثال سریع:
numbers = list(range(1, 11))
# خروجی: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
یه مثال بیشتر 1:
for i in range(1, 6):
print(i) # 1..5
print(list(range(0, 10, 3))) # [0, 3, 6, 9]
۸۷ عبارت pass
ایدهٔ اصلی: به زبان ساده، میتوانید از عبارت pass به عنوان یک جایگزین برای کدی که بعداً پیادهسازی خواهد شد، استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `pass` یعنی «فعلاً هیچ کاری نکن». این برای تعریف بلوکهای خالی لازم است (مثلاً بدنه کلاس/تابع که بعداً پر میشود).
کِی به درد میخوره؟
- استاب کردن تابع/کلاس در حین طراحی.
- نوشتن if/except/loop خالی (بهصورت موقت).
- وقتی به یک placeholder نیاز دارید تا سینتکس کامل شود.
یه مثال سریع:
def my_function():
# TODO: Implement this function
pass
یه مثال بیشتر 1:
def todo():
pass # TODO: implement later
class MyClass:
pass
۸۸ بلوک try , except , و finally
ایدهٔ اصلی: به زبان ساده، برای مدیریت استثنا میتوانید از try ، except و finally استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، try/except برای مدیریت خطاست. `else` فقط وقتی اجرا میشود که خطا رخ ندهد و `finally` همیشه اجرا میشود (cleanup).
کِی به درد میخوره؟
- مدیریت خطاهای قابل پیشبینی (مثل تبدیل نوع، فایل پیدا نشدن).
- جلوگیری از کرش و ارائه پیام مناسب.
- پاکسازی منابع در finally.
یه مثال سریع:
try:
# کدی که ممکن است استثنا ایجاد کند
result = 10 / 0
except ZeroDivisionError as e:
# مدیریت استثنا
print(f"Error: {e}")
finally:
# کد پاکسازی که همیشه اجرا میشود
print("Cleanup")
یه مثال بیشتر 1:
try:
x = int("42")
except ValueError:
print("عدد نامعتبر است")
else:
print("عدد معتبر:", x)
finally:
print("این بخش همیشه اجرا میشود")
۸۹ Namedtuples برای کلاسهای ساده
ایدهٔ اصلی: به زبان ساده، برای ایجاد کلاسهای ساده با فیلدهای نامگذاری شده میتوانید از namedtuple استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `namedtuple` مثل tuple است ولی فیلدهای نامدار دارد. سبک و سریع است و خوانایی را بالا میبرد.
کِی به درد میخوره؟
- مدلکردن دادههای ساده مثل Point یا RGB.
- خروجی چندتایی از تابع با نامهای واضح.
- جایگزین سبک برای کلاسهای خیلی ساده.
یه مثال سریع:
from collections import namedtuple
Person = namedtuple("Person", ["name", "age"])
person = Person("Alice", 30)
print(person.name) # خروجی: "Alice"
print(person.age) # خروجی: 30
یه مثال بیشتر 1:
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(2, 3)
print(p.x, p.y)
print(p._asdict())
۹۰ تابع sorted با کلید سفارشی
ایدهٔ اصلی: به زبان ساده، برای مرتبسازی یک لیست بر اساس یک صفت خاص، میتوانید از sorted با یک تابع کلید سفارشی استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `sorted` یک لیست جدیدِ مرتبشده برمیگرداند و ورودی را تغییر نمیدهد. با `key=` معیار مرتبسازی را تعیین کنید و با `reverse=True` ترتیب را برعکس کنید.
کِی به درد میخوره؟
- مرتبسازی برای نمایش یا گزارش.
- مرتب کردن بر اساس فیلد/کلید خاص.
- حفظ لیست اصلی و ساخت نسخه مرتبشده.
یه مثال سریع:
people = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob', 'age': 25},
{'name': 'Charlie', 'age': 35}
]
sorted_by_age = sorted(people, key=lambda x: x['age'])
یه مثال بیشتر 1:
words = ["python", "go", "javascript", "c"]
by_len = sorted(words, key=len)
print(by_len)
۹۱ متد setdefault دیکشنری
ایدهٔ اصلی: به زبان ساده، برای تنظیم یک مقدار پیشفرض برای یک کلید ناموجود در یک دیکشنری میتوانید از setdefault استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
my_dict = {'a': 1, 'b': 2}
value = my_dict.setdefault('c', 0) # خروجی: 0
۹۲ قالببندی زمان با datetime
ایدهٔ اصلی: به زبان ساده، برای قالببندی زمان میتوانید از datetime استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `datetime` برای تاریخ و زمان است. در پروژههای واقعی، timezone (مثل UTC) را جدی بگیرید تا خطاهای اختلاف ساعت رخ ندهد.
کِی به درد میخوره؟
- ثبت زمان رویدادها در لاگ.
- محاسبه بازهها با timedelta.
- فرمت کردن تاریخ برای نمایش/ذخیره.
یه مثال سریع:
import datetime
now = datetime.datetime.now()
# قالببندی به صورت ISO 8601
formatted_time = now.isoformat() # خروجی: "2023-08-02T12:34:56.789012"
# قالببندی سفارشی
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S.%f") # خروجی: "2023-08-02 12:34:56.789012"
یه مثال بیشتر 1:
import datetime
now = datetime.datetime.now()
print(now.isoformat(timespec="seconds"))
۹۳ ماژول os برای عملیات فایل
ایدهٔ اصلی: به زبان ساده، ماژول os توابعی برای عملیات مرتبط با فایل فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `os` برای کارهای سیستمعامل مثل فایلها، پوشهها، env vars و اجرای دستورات است.
کِی به درد میخوره؟
- ساخت/حذف پوشهها و فایلها.
- خواندن متغیرهای محیطی (ENV).
- کار با مسیرها (در کنار os.path/pathlib).
یه مثال سریع:
import os
# دریافت دایرکتوری کاری فعلی
current_directory = os.getcwd()
# لیست کردن فایلها در یک دایرکتوری
files = os.listdir('/path/to/directory')
# بررسی وجود یک فایل یا دایرکتوری
exists = os.path.exists('/path/to/file_or_directory')
# ایجاد یک دایرکتوری
os.makedirs('/path/to/new_directory')
# حذف یک فایل
os.remove('/path/to/file')
# تغییر نام یک فایل
os.rename('/path/to/old_file', '/path/to/new_file')
# دریافت اندازه فایل
file_size = os.path.getsize('/path/to/file')
یه مثال بیشتر 1:
import os
print(os.getenv("HOME"))
print(os.listdir("."))
۹۴ عملگر in برای بررسی عضویت
ایدهٔ اصلی: به زبان ساده، میتوانید بررسی کنید که آیا یک عنصر در یک لیست یا دیکشنری وجود دارد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، عملگر `in` برای بررسی عضویت استفاده میشود. از نظر عملکردی، جستجو در `set` و `dict` معمولاً سریعتر از `list` است (میانگین O(1)).
کِی به درد میخوره؟
- چک کردن اینکه یک کلید در dict هست یا نه.
- حذف تکراریها و چک سریع با set.
- اعتبارسنجی ورودی بر اساس whitelist.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
if 3 in numbers:
print("3 is in the list.")
my_dict = {'a': 1, 'b': 2}
if 'b' in my_dict:
print("Key 'b' exists in the dictionary.")
یه مثال بیشتر 1:
allowed = {"GET", "POST", "PUT"}
method = "POST"
print(method in allowed) # True
۹۵ ماژول time برای عملیات زمانی
ایدهٔ اصلی: به زبان ساده، ماژول time توابعی برای کار با زمان فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `time` توابعی مثل `sleep` و `perf_counter` دارد. برای اندازهگیری دقیق زمان، `perf_counter` بهتر از `time.time` است.
کِی به درد میخوره؟
- توقف کوتاه (sleep) در اسکریپتها.
- زمانسنجی ساده با perf_counter.
- کارهای مرتبط با timestamp.
یه مثال سریع:
import time
# دریافت زمان فعلی به ثانیه
current_time = time.time()
# توقف برای مدت زمان مشخص
time.sleep(3) # توقف برای 3 ثانیه
یه مثال بیشتر 1:
import time
start = time.perf_counter()
time.sleep(0.2)
end = time.perf_counter()
print(f"Elapsed: {end - start:.3f}s")
۹۶ عبارت assert
ایدهٔ اصلی: به زبان ساده، برای اشکالزدایی و تست میتوانید از assert استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `assert` برای چک کردن فرضیات در زمان توسعه است. اگر شرط False شود، AssertionError رخ میدهد.
کِی به درد میخوره؟
- دیباگ و چک کردن invariants.
- تستهای کوچک در حین توسعه.
- اطمینان از پیششرطها (در حالت توسعه).
یه مثال سریع:
def my_function(x):
assert x > 0, "x must be positive"
# بقیه کد
یه مثال بیشتر 1:
def divide(a, b):
assert b != 0, "b must not be zero"
return a / b
print(divide(10, 2))
۹۷ ماژول random برای اعداد تصادفی
ایدهٔ اصلی: به زبان ساده، ماژول random توابعی برای تولید اعداد تصادفی فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `random` برای کارهای عمومی تصادفی مناسب است. برای کارهای امنیتی (توکن/پسورد) از `secrets` استفاده کنید.
کِی به درد میخوره؟
- sample و shuffle دادهها.
- شبیهسازیهای ساده.
- تستهای قابل تکرار با seed.
یه مثال سریع:
import random
# عدد صحیح تصادفی
random_number = random.randint(1, 10)
# عدد اعشاری تصادفی
random_float = random.random() # محدوده: 0.0 <= random_float < 1.0
# انتخاب تصادفی
choices = ['apple', 'banana', 'cherry']
random_choice = random.choice(choices)
یه مثال بیشتر 1:
import random
items = [1, 2, 3, 4, 5]
print(random.choice(items))
print(random.sample(items, k=3))
۹۸ ماژول os.path برای عملیات مسیر
ایدهٔ اصلی: به زبان ساده، ماژول os.path توابعی برای عملیات مرتبط با مسیر فراهم میکند.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `os` برای کارهای سیستمعامل مثل فایلها، پوشهها، env vars و اجرای دستورات است.
کِی به درد میخوره؟
- ساخت/حذف پوشهها و فایلها.
- خواندن متغیرهای محیطی (ENV).
- کار با مسیرها (در کنار os.path/pathlib).
یه مثال سریع:
import os.path
# بررسی وجود یک مسیر
exists = os.path.exists('/path/to/file_or_directory')
# دریافت مسیر مطلق
absolute_path = os.path.abspath('file.txt')
# اتصال مسیرها
path = os.path.join('/path/to', 'file.txt')
# دریافت نام پایه یک مسیر
base_name = os.path.basename('/path/to/file.txt')
یه مثال بیشتر 1:
import os
print(os.getenv("HOME"))
print(os.listdir("."))
۹۹ تابع filter برای فیلتر کردن عناصر
ایدهٔ اصلی: به زبان ساده، برای فیلتر کردن عناصر در یک لیست بر اساس یک شرط میتوانید از filter استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `filter(func, iterable)` آیتمهایی را نگه میدارد که func برایشان True شود. اگر func را None بدهید، فقط truthyها میمانند.
کِی به درد میخوره؟
- فیلتر کردن دادهها بر اساس شرط.
- پاکسازی لیستها از آیتمهای خالی (با filter(None,...)).
- ساخت pipelineهای پردازش داده به صورت iterator.
یه مثال سریع:
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
یه مثال بیشتر 1:
numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # [2, 4, 6]
۱۰۰ توابع lambda
ایدهٔ اصلی: به زبان ساده، برای توابع ساده و بینام میتوانید از توابع lambda استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، lambda یک تابع بینام و کوتاه است. برای کارهای خیلی ساده (بهخصوص به عنوان key یا callback) مناسب است.
کِی به درد میخوره؟
- به عنوان `key=` در sort/max/min.
- در map/filter برای عملیات کوچک.
- برای callbackهای کوتاه.
یه مثال سریع:
add = lambda x, y: x + y
result = add(3, 5) # خروجی: 8
یه مثال بیشتر 1:
people = [{"name": "Ali", "age": 20}, {"name": "Sara", "age": 18}]
sorted_people = sorted(people, key=lambda p: p["age"])
print(sorted_people)
۱۰۱ تابع functools.partial
ایدهٔ اصلی: به زبان ساده، برای ایجاد توابع با آرگومانهای ثابت میتوانید از functools.partial استفاده کنید.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `functools.partial` برخی آرگومانها را از قبل مقداردهی میکند و یک تابع جدید میسازد. برای ساخت توابع تخصصی از توابع عمومی مفید است.
کِی به درد میخوره؟
- ساخت wrapperهای ساده بدون نوشتن def جدید.
- فیکس کردن پارامترهای تکراری در callbackها.
- کاهش تکرار هنگام استفاده از توابع عمومی.
یه مثال سریع:
import functools
def power(base, exponent):
return base ** exponent
square = functools.partial(power, exponent=2)
cube = functools.partial(power, exponent=3)
print(square(5)) # خروجی: 25
print(cube(5)) # خروجی: 125
یه مثال بیشتر 1:
from functools import partial
def power(base, exp):
return base ** exp
square = partial(power, exp=2)
cube = partial(power, exp=3)
print(square(5)) # 25
print(cube(2)) # 8
بخش دوم-پیشرفته
موضوعات پیشرفتهتر و ابزارهای مهم اکوسیستم پایتون.
۱ مدیرهای زمینه (Context Managers)
ایدهٔ اصلی: به زبان ساده، توضیح: مدیرهای زمینه مدیریت منابع را در پایتون با فراهم کردن راهی برای تخصیص و آزادسازی منابع ساده میکنند. این کار با استفاده از عبارت with انجام میشود، جایی که منطق راهاندازی و پایاندهی به طور خودکار مدیریت میشود.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Context Managerها برای مدیریت منابع هستند: setup در __enter__ و cleanup در __exit__. این الگو باعث میشود نشت منابع کمتر شود.
کِی به درد میخوره؟
- مدیریت فایل، قفل، تراکنش DB، کانکشن شبکه و ...
- اجرای cleanup حتی در صورت exception.
- نوشتن APIهای تمیز با قرارداد روشن.
یه مثال سریع:
from contextlib import contextmanager
@contextmanager
def manage_file(filename):
file = open(filename, 'r')
yield file
file.close()
with manage_file('file.txt') as file:
print(file.read())
یه مثال بیشتر 1:
class Timer:
def __enter__(self):
import time
self.start = time.perf_counter()
return self
def __exit__(self, exc_type, exc, tb):
import time
end = time.perf_counter()
print(f"Elapsed: {end - self.start:.6f}s")
with Timer():
_ = sum(range(1000000))
۲ متاکلاسها (Metaclasses)
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: متاکلاسها در پایتون کلاسهایی از کلاسها هستند. آنها به شما اجازه میدهند تا ایجاد و رفتار یک کلاس را کنترل کنید. تابع type معمولاً به عنوان یک متاکلاس استفاده میشود.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، متاکلاسها پیشرفتهاند. در بسیاری از نیازها، `__init_subclass__` یا decorator کلاس کافی است و پیچیدگی کمتر دارد.
کِی به درد میخوره؟
- ثبت خودکار کلاسها (registry).
- اعتبارسنجی ساختار کلاس هنگام تعریف.
- ساخت DSLها یا فریمورکها.
یه مثال سریع:
class Meta(type):
def __new__(cls, name, bases, dct):
print(f"Creating class {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
pass
یه مثال بیشتر 1:
class Base:
registry = []
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
Base.registry.append(cls)
class A(Base): ...
class B(Base): ...
print([c.__name__ for c in Base.registry]) # ['A', 'B']
۳ انباشت دکوراتور (Decorator Stacking)
ایدهٔ اصلی: به زبان ساده، توضیح: انباشت دکوراتور به اعمال چندین دکوراتور به یک تابع اشاره دارد. ترتیب مهم است، زیرا هر دکوراتور تابعی را که توسط دکوراتور قبلی بازگردانده شده است، در بر میگیرد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، دکوراتورها به شما اجازه میدهند رفتار مشترک را بدون دستکاری منطق اصلی تابع اضافه کنید (مانند لاگگیری، زمانسنجی، کش).
کِی به درد میخوره؟
- Timing و profiling سریع توابع.
- Authorization و validation.
- Caching با `functools.lru_cache` یا دکوراتورهای سفارشی.
یه مثال سریع:
def decorator_one(func):
def wrapper():
print("Decorator One")
func()
return wrapper
def decorator_two(func):
def wrapper():
print("Decorator Two")
func()
return wrapper
@decorator_one
@decorator_two
def my_function():
print("Original Function")
my_function()
یه مثال بیشتر 1:
import time
from functools import wraps
def timing(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} took {end - start:.6f}s")
return result
return wrapper
@timing
def work():
return sum(range(100000))
work()
۴ حاشیهنویسی تابع (Function Annotations)
ایدهٔ اصلی: به زبان ساده، توضیح: حاشیهنویسی تابع برای ارائه فراداده (metadata) در مورد پارامترها و مقدار بازگشتی تابع استفاده میشود. این میتواند برای مستندسازی و راهنمایی نوع (type hinting) مفید باشد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
def add(a: int, b: int) -> int:
"""Add two integers."""
return a + b
۵ سربارگذاری تابع (Function Overloading)
ایدهٔ اصلی: به زبان ساده، توضیح: سربارگذاری تابع به یک تابع اجازه میدهد تا بر اساس آرگومانهایش رفتارهای متعددی داشته باشد. پایتون به طور مستقیم از سربارگذاری تابع پشتیبانی نمیکند، اما میتوانید با استفاده از آرگومانهای پیشفرض و بررسی نوع به عملکرد مشابهی دست یابید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، پایتون سربارگذاری سنتی ندارد، ولی `functools.singledispatch` امکان dispatch بر اساس نوع را میدهد.
کِی به درد میخوره؟
- APIهایی که برای انواع مختلف ورودی رفتار متفاوت دارند.
- کاهش if/elifهای زیاد بر اساس type.
- کتابخانههای عمومیتر.
یه مثال سریع:
def multiply(a, b=None):
if b is None:
return a * a
else:
return a * b
print(multiply(3)) # خروجی: 9
print(multiply(3, 4)) # خروجی: 12
یه مثال بیشتر 1:
from functools import singledispatch
@singledispatch
def describe(x):
return f"Unknown: {x}"
@describe.register
def _(x: int):
return f"int: {x}"
@describe.register
def _(x: str):
return f"str: {x}"
print(describe(10))
print(describe("hi"))
۶ کلاسهای پایه انتزاعی (Abstract Base Classes - ABCs)
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: کلاسهای پایه انتزاعی برای تعریف یک رابط مشترک برای کلاسهای مشتق شده استفاده میشوند. آنها به شما اجازه میدهند متدهایی را تعریف کنید که باید در هر کلاس فرزند پیادهسازی شوند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ABCs قراردادها را رسمی میکنند: کلاس فرزند باید متدهای abstract را پیادهسازی کند. این برای معماریهای بزرگ مفید است.
کِی به درد میخوره؟
- تعریف interface مشترک بین چند پیادهسازی.
- کاهش خطاهای runtime با الزام به پیادهسازی.
- ساخت معماری پلاگین/driver.
یه مثال سریع:
from abc import ABC, abstractmethod
class MyABC(ABC):
@abstractmethod
def my_abstract_method(self):
pass
class ConcreteClass(MyABC):
def my_abstract_method(self):
print("Implemented abstract method")
obj = ConcreteClass()
obj.my_abstract_method() # خروجی: Implemented abstract method
یه مثال بیشتر 1:
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self, key, value): ...
@abstractmethod
def load(self, key): ...
class MemoryStorage(Storage):
def __init__(self):
self._db = {}
def save(self, key, value):
self._db[key] = value
def load(self, key):
return self._db.get(key)
s = MemoryStorage()
s.save("a", 1)
print(s.load("a"))
۷ وارد کردن پویا (Dynamic Importing)
ایدهٔ اصلی: به زبان ساده، توضیح: وارد کردن پویا به شما اجازه میدهد ماژولها و کلاسها را در زمان اجرا وارد کنید. میتوانید از ماژول importlib یا تابع __import__ برای این منظور استفاده کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Dynamic import وقتی مفید است که نام ماژول/کلاس در زمان اجرا مشخص میشود (مثلاً از config).
کِی به درد میخوره؟
- سیستم پلاگین.
- lazy import برای کاهش زمان startup.
- انتخاب backend بر اساس تنظیمات.
یه مثال سریع:
import importlib
math_module = importlib.import_module('math')
sqrt = math_module.sqrt
print(sqrt(16)) # خروجی: 4.0
یه مثال بیشتر 1:
import importlib
module_name = "math"
mod = importlib.import_module(module_name)
print(mod.sqrt(81))
۸ مولدها در مقابل تکرارکنندهها (Generators vs. Iterators)
ایدهٔ اصلی: به زبان ساده، توضیح.
ایدهٔ اصلی: به زبان ساده، تکرارکنندهها (Iterators): شیئی که امکان پیمایش روی عناصر خود را با استفاده از متدهای __iter__ و __next__ فراهم میکند. مولدها (Generators): راهی سادهتر برای ایجاد تکرارکنندهها با استفاده از توابع و عبارت yield .
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
# تکرارکننده
class MyIterator:
def __iter__(self):
self.num = 1
return self
def __next__(self):
self.num *= 2
return self.num
# مولد
def my_generator():
num = 1
while True:
num *= 2
yield num
۹ کوروتینها (Coroutines)
ایدهٔ اصلی: به زبان ساده، توضیح: کوروتینها شکل کلیتری از زیرروالها هستند که چندین نقطه ورود برای توقف و از سرگیری اجرا را فراهم میکنند. در پایتون، میتوانید با استفاده از کلمات کلیدی async و await کوروتین ایجاد کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import asyncio
async def my_coroutine():
print("Start")
await asyncio.sleep(1)
print("End")
asyncio.run(my_coroutine())
۱۰ مدیرهای زمینه ناهمگام (Asynchronous Context Managers)
ایدهٔ اصلی: به زبان ساده، توضیح: مدیرهای زمینه ناهمگام امکان مدیریت منابع را در یک زمینه ناهمگام با استفاده از async with فراهم میکنند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `ord` کد یونیکد یک کاراکتر را میدهد و `chr` برعکس، از کد یونیکد کاراکتر میسازد. برای کارهای متنی/رمزگذاری ساده مفید است.
کِی به درد میخوره؟
- تبدیل کاراکتر به عدد و برعکس.
- ساختن الگوریتمهای ساده روی حروف (مثل Caesar cipher).
- کار با یونیکد و کدپوینتها.
یه مثال سریع:
import aiofiles
async def read_file():
async with aiofiles.open('file.txt', mode='r') as file:
contents = await file.read()
print(contents)
# برای اجرای کد بالا در یک زمینه مناسب از asyncio.run(read_file()) استفاده کنید
یه مثال بیشتر 1:
ch = "A"
code = ord(ch)
print(code) # 65
print(chr(code)) # A
۱۱ تکرارکنندههای ناهمگام (Asynchronous Iterators)
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: تکرارکنندههای ناهمگام امکان پیمایش ناهمگام را با استفاده از متدهای __aiter__ و __anext__ فراهم میکنند. آنها به شما امکان میدهند روی آیتمها به صورت ناهمگام پیمایش کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `ord` کد یونیکد یک کاراکتر را میدهد و `chr` برعکس، از کد یونیکد کاراکتر میسازد. برای کارهای متنی/رمزگذاری ساده مفید است.
کِی به درد میخوره؟
- تبدیل کاراکتر به عدد و برعکس.
- ساختن الگوریتمهای ساده روی حروف (مثل Caesar cipher).
- کار با یونیکد و کدپوینتها.
یه مثال سریع:
class AsyncCounter:
def __init__(self, limit):
self.limit = limit
def __aiter__(self):
self.count = 0
return self
async def __anext__(self):
if self.count < self.limit:
self.count += 1
return self.count
else:
raise StopAsyncIteration
async def run():
async for value in AsyncCounter(5):
print(value)
# برای اجرای کد از asyncio.run(run()) استفاده کنید
یه مثال بیشتر 1:
ch = "A"
code = ord(ch)
print(code) # 65
print(chr(code)) # A
۱۲ کتابخانه asyncio
ایدهٔ اصلی: به زبان ساده، توضیح: کتابخانه asyncio برای نوشتن کد همزمان با استفاده از سینتکس async/await در پایتون استفاده میشود. این کتابخانه یک حلقه رویداد (event loop) فراهم میکند که زمانبندی و اجرای وظایف ناهمگام را مدیریت میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، asyncio برای I/O concurrency عالی است (شبکه/فایل/DB). برای CPU-bound معمولاً باید از process pool استفاده کنید.
کِی به درد میخوره؟
- درخواستهای همزمان به چند API.
- باتها و سرویسهای I/O محور.
- ساخت pipeline async.
یه مثال سریع:
import asyncio
async def print_numbers():
for i in range(5):
print(i)
await asyncio.sleep(1)
asyncio.run(print_numbers())
یه مثال بیشتر 1:
import asyncio
async def say(name, delay):
await asyncio.sleep(delay)
return f"Hi {name}"
async def main():
results = await asyncio.gather(
say("Ali", 1),
say("Sara", 0.5),
)
print(results)
asyncio.run(main())
۱۳ Concurrent.Futures
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول concurrent.futures یک رابط سطح بالا برای اجرای ناهمگام توابع با استفاده از نخها (threads) یا فرآیندها (processes) فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from concurrent.futures import ThreadPoolExecutor
def task(n):
return n * 2
with ThreadPoolExecutor() as executor:
results = executor.map(task, [1, 2, 3])
print(list(results)) # خروجی: [2, 4, 6]
۱۴ ThreadPoolExecutor
ایدهٔ اصلی: به زبان ساده، توضیح: کلاس ThreadPoolExecutor برای مدیریت موازیسازی مبتنی بر نخ استفاده میشود. این کلاس اجرای همزمان وظایف را در نخهای جداگانه امکانپذیر میسازد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ThreadPool برای کارهای I/O-bound مناسب است. برای CPU-bound به خاطر GIL معمولاً ProcessPool بهتر است.
کِی به درد میخوره؟
- دانلود/شبکه با کتابخانههای blocking.
- خواندن/نوشتن فایل همزمان.
- اجرای چند کار مستقل بدون thread دستی.
یه مثال سریع:
from concurrent.futures import ThreadPoolExecutor
def square(n):
return n * n
with ThreadPoolExecutor() as executor:
future = executor.submit(square, 3)
print(future.result()) # خروجی: 9
یه مثال بیشتر 1:
from concurrent.futures import ThreadPoolExecutor
def work(i):
return i * 2
with ThreadPoolExecutor(max_workers=4) as ex:
print(list(ex.map(work, range(5))))
۱۵ ProcessPoolExecutor
ایدهٔ اصلی: به زبان ساده، توضیح: کلاس ProcessPoolExecutor امکان اجرای موازی وظایف را در فرآیندهای مختلف فراهم میکند و از چندین هسته CPU بهره میبرد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ProcessPool برای کارهای CPU-bound مناسب است چون هر process مفسر جدا دارد و محدودیت GIL کمتر اثر میگذارد.
کِی به درد میخوره؟
- محاسبات سنگین روی CPU.
- اجرای parallel واقعی روی چند هسته.
- تقسیم کارهای مستقل.
یه مثال سریع:
from concurrent.futures import ProcessPoolExecutor
def multiply(n):
return n * 2
with ProcessPoolExecutor() as executor:
results = list(executor.map(multiply, [1, 2, 3]))
print(results) # خروجی: [2, 4, 6]
یه مثال بیشتر 1:
from concurrent.futures import ProcessPoolExecutor
def cpu_work(n):
return sum(i*i for i in range(n))
with ProcessPoolExecutor() as ex:
print(list(ex.map(cpu_work, [200000, 200000, 200000])))
۱۶ مدیریت حافظه (Memory Management)
ایدهٔ اصلی: به زبان ساده، توضیح: مدیریت حافظه در پایتون شامل تخصیص، آزادسازی و جمعآوری زباله (garbage collection) حافظه است. مدیر حافظه پایتون این جنبهها را به طور خودکار مدیریت میکند، اما شما میتوانید با استفاده از برخی توابع داخلی با آن تعامل داشته باشید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import gc
# فعالسازی دستی جمعآوری زباله
gc.collect()
# دریافت تعداد اشیاء ردیابی شده توسط جمعآورنده زباله
print(gc.get_count())
۱۷ پروفایلسازی و بهینهسازی (Profiling and Optimization)
ایدهٔ اصلی: به زبان ساده، توضیح: پروفایلسازی به اندازهگیری اجرای برنامه برای تحلیل عملکرد آن اشاره دارد. بهینهسازی شامل بهبود عملکرد کد با کاهش گلوگاهها (bottlenecks) است.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import cProfile
def factorial(n):
return 1 if n == 0 else n * factorial(n-1)
def main():
print(factorial(10))
cProfile.run('main()')
۱۸ سایthon (Cython)
ایدهٔ اصلی: به زبان ساده، توضیح: سایthon یک زبان برنامهنویسی است که پایتون را با C ترکیب میکند و بهبود عملکرد را ممکن میسازد. این زبان اجازه میدهد کد پایتون به C کامپایل شود و در نتیجه سرعت اجرا بهبود یابد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
# my_cython_module.pyx
def multiply(a, b):
return a * b
# کامپایل با سایthon
# cythonize -i my_cython_module.pyx
# استفاده در پایتون
# import my_cython_module
# print(my_cython_module.multiply(3, 4)) # خروجی: 12
۱۹ نماهای حافظه (Memory Views)
ایدهٔ اصلی: به زبان ساده، توضیح: نماهای حافظه راهی برای دسترسی به دادههای داخلی یک شیء بدون کپی کردن فراهم میکنند. آنها امکان دستکاری کارآمد ساختارهای دادهای را که از پروتکل بافر پشتیبانی میکنند، فراهم میکنند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
arr = bytearray([1, 2, 3, 4])
mem_view = memoryview(arr)
mem_view[1] = 5
print(arr) # خروجی: bytearray(b'\x01\x05\x03\x04')
۲۰ GIL (قفل سراسری مفسر - Global Interpreter Lock)
ایدهٔ اصلی: به زبان ساده، توضیح: قفل سراسری مفسر (GIL) یک mutex است که اجازه میدهد در هر زمان فقط یک نخ در مفسر اجرا شود. این میتواند عملکرد برنامههای چندنخی وابسته به CPU را محدود کند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، GIL در CPython باعث میشود threadها برای CPU-bound بهبود خطی ندهند. برای I/O-bound threadها هنوز مفیدند.
کِی به درد میخوره؟
- انتخاب درست بین thread/process/async.
- درک محدودیتهای همزمانی در CPython.
- طراحی معماری مناسب برای کارهای CPU و I/O.
یه مثال سریع:
# GIL میتواند بر کدی مانند این تأثیر بگذارد:
from threading import Thread
def count_up_to(n):
count = 0
while count < n:
count += 1
threads = [Thread(target=count_up_to, args=(100000000,)) for _ in range(2)]
for t in threads:
t.start()
for t in threads:
t.join()
# عملکرد ممکن است به صورت خطی با تعداد نخها به دلیل GIL افزایش نیابد
۲۱ افزونههای C (C Extensions)
ایدهٔ اصلی: به زبان ساده، توضیح: افزونههای C امکان ادغام کد C با پایتون را برای دستیابی به عملکرد بهتر در بخشهای حیاتی کد فراهم میکنند. آنها به توسعهدهندگان اجازه میدهند ماژولهای بومی را در C بنویسند که میتوانند مانند ماژولهای معمولی پایتون وارد و استفاده شوند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
مثال 1:
// example.c
#include
static PyObject* multiply(PyObject* self, PyObject* args) {
int a, b;
if (!PyArg_ParseTuple(args, "ii", &a, &b))
return NULL;
return Py_BuildValue("i", a * b);
}
// ... (بقیه کد افزونه C)
مثال 2:
# کامپایل کردن
# gcc -shared -o example.so -I /usr/include/python3.8 example.c
مثال 3:
# استفاده در پایتون
# import example
# print(example.multiply(2, 3)) # خروجی: 6
۲۲ C-API
ایدهٔ اصلی: به زبان ساده، توضیح: C-API پایتون امکان ارتباط بین پایتون و C را فراهم میکند و ایجاد افزونههای بومی سفارشی و تعامل با اشیاء پایتون از کد C را ممکن میسازد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
ایدهٔ اصلی: به زبان ساده، // مشابه مثال افزونه C در بالا.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، در کار با APIها، علاوه بر درخواست، مدیریت خطا، timeout، retry و rate limit مهم است.
کِی به درد میخوره؟
- اتصال به سرویسهای بیرونی.
- ساخت کلاینت داخلی برای سرویسها.
- جمعآوری داده از API.
۲۳ NumPy
ایدهٔ اصلی: به زبان ساده، توضیح: NumPy یک کتابخانه قدرتمند برای محاسبات عددی در پایتون است که پشتیبانی از آرایهها و ماتریسهای بزرگ را به همراه توابع ریاضی برای عملیات روی این آرایهها فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، NumPy عملیات برداری و آرایهای را سریع انجام میدهد چون بخشهای سنگین در C اجرا میشوند. هدف اصلی کاهش حلقههای پایتونی است.
کِی به درد میخوره؟
- محاسبات عددی و ماتریسی.
- پردازش داده علمی.
- پیشپردازش داده برای ML.
یه مثال سریع:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# جمع عنصر به عنصر
result = a + b
print(result) # خروجی: [5 7 9]
یه مثال بیشتر 1:
import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr * 10)
۲۴ SciPy
ایدهٔ اصلی: به زبان ساده، توضیح: SciPy یک کتابخانه منبع باز است که برای محاسبات علمی و فنی استفاده میشود. این کتابخانه بر پایه NumPy ساخته شده و ماژولهای اضافی برای بهینهسازی، انتگرالگیری، درونیابی و موارد دیگر فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from scipy.optimize import minimize
def objective_function(x):
return x**2 + 3*x - 5
result = minimize(objective_function, 0)
print(result.x) # خروجی: تقریب از نقطه کمینه
۲۵ pandas
ایدهٔ اصلی: به زبان ساده، توضیح: pandas یک کتابخانه محبوب برای دستکاری و تحلیل داده است. این کتابخانه ساختارهای دادهای مانند DataFrame و Series را برای مدیریت و تحلیل دادههای ساختاریافته فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، pandas برای دادههای جدولی عالی است. با DataFrame میتوانید فیلتر، گروهبندی و تجمیع انجام دهید.
کِی به درد میخوره؟
- تحلیل و پاکسازی داده.
- خواندن/نوشتن CSV/Excel/SQL.
- ETL سبک و گزارشگیری.
یه مثال سریع:
import pandas as pd
data = {
'Name': ['Alice', 'Bob'],
'Age': [25, 30]
}
df = pd.DataFrame(data)
# فیلتر کردن بر اساس سن
filtered_df = df[df['Age'] > 26]
print(filtered_df) # خروجی: دادههای مربوط به Bob
یه مثال بیشتر 1:
import pandas as pd
df = pd.DataFrame({"name": ["Ali", "Sara"], "score": [18, 15]})
print(df[df["score"] >= 17])
۲۶ Matplotlib
ایدهٔ اصلی: به زبان ساده، توضیح: Matplotlib یک کتابخانه پرکاربرد برای ایجاد تجسمهای ایستا، تعاملی و متحرک در پایتون است.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Matplotlib کتابخانهٔ پایهٔ رسم نمودار است و کنترل دقیق روی اجزای نمودار میدهد.
کِی به درد میخوره؟
- نمودارهای علمی و گزارشها.
- EDA و بررسی سریع دادهها.
- ذخیره نمودار به فایل.
یه مثال سریع:
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [4, 6, 8]
plt.plot(x, y)
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.title('Line Plot')
plt.show()
یه مثال بیشتر 1:
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [1, 4, 9]
plt.plot(x, y)
plt.title("y = x^2")
plt.show()
۲۷ Seaborn
ایدهٔ اصلی: به زبان ساده، توضیح: Seaborn یک کتابخانه تجسم داده مبتنی بر Matplotlib است. این کتابخانه یک رابط سطح بالاتر و آسانتر برای ایجاد گرافیکهای آموزنده و جذاب فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Seaborn روی Matplotlib ساخته شده و نمودارهای آماری آمادهتر دارد؛ برای EDA خیلی سریع است.
کِی به درد میخوره؟
- heatmap، boxplot، pairplot و ...
- بررسی توزیع دادهها.
- نمودارهای آماری با استایل بهتر.
یه مثال سریع:
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.boxplot(x='day', y='total_bill', data=tips)
plt.show()
۲۸ Plotly
ایدهٔ اصلی: به زبان ساده، توضیح: Plotly یک کتابخانه رسم نمودار است که امکان ایجاد نمودارهای تعاملی و جذاب بصری را فراهم میکند. میتوان از آن برای انواع مختلف نمودارها و تجسمها استفاده کرد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Plotly نمودارهای تعاملی میسازد و برای وب/داشبورد عالی است (hover/zoom).
کِی به درد میخوره؟
- داشبوردهای تعاملی.
- گزارشهای تعاملی در notebook.
- نمایش داده برای تصمیمگیری.
یه مثال سریع:
import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x="sepal_width", y="sepal_length", color="species")
fig.show()
۲۹ Bokeh
ایدهٔ اصلی: به زبان ساده، توضیح: Bokeh یک کتابخانه پایتون برای ایجاد تجسمهای تعاملی مبتنی بر وب است. این کتابخانه ابزارهایی برای تولید گرافیکهای زیبا و تعاملی که میتوانند در برنامههای وب تعبیه شوند، فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Bokeh هم برای نمودارهای تعاملی وب طراحی شده و خروجی HTML مستقل تولید میکند.
کِی به درد میخوره؟
- نمودارهای تعاملی قابل تعبیه در وب.
- داشبوردهای ساده.
- ارتباط با جاوااسکریپت.
یه مثال سریع:
from bokeh.plotting import figure, show
p = figure(title="Line Plot Example", x_axis_label='x', y_axis_label='y')
p.line([1, 2, 3], [4, 6, 5], line_width=2)
show(p)
۳۰ scikit-learn
ایدهٔ اصلی: به زبان ساده، توضیح: scikit-learn یک کتابخانه محبوب برای یادگیری ماشین است. این کتابخانه ابزارهای ساده و کارآمدی برای دادهکاوی، تحلیل داده و مدلسازی فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، scikit-learn برای ML کلاسیک است: regression, classification, clustering و preprocessing. برای baseline بسیار مناسب است.
کِی به درد میخوره؟
- ساخت مدلهای کلاسیک سریع.
- pipelineهای preprocessing + model.
- cross-validation و ارزیابی مدل.
یه مثال سریع:
from sklearn.linear_model import LinearRegression
X = [[1], [2], [3]]
y = [2, 4, 6]
model = LinearRegression()
model.fit(X, y)
prediction = model.predict([[4]])
print(prediction) # خروجی: تقریب از 8
۳۱ TensorFlow
ایدهٔ اصلی: به زبان ساده، توضیح: TensorFlow یک چارچوب یادگیری ماشین منبع باز است که توسط گوگل توسعه یافته است. این چارچوب برای ایجاد مدلهای یادگیری عمیق و سایر وظایف یادگیری ماشین طراحی شده است.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ابزارها برای deep learning هستند. برای مثالهای واقعی معمولاً به GPU و تنظیمات محیط نیاز دارید.
کِی به درد میخوره؟
- شبکههای عصبی برای CV/NLP و ...
- آموزش مدلهای بزرگتر با GPU.
- استقرار مدلها در سرویسها.
یه مثال سریع:
import tensorflow as tf
import numpy as np
# تعریف یک مدل Sequential ساده
model = tf.keras.Sequential([
tf.keras.layers.Dense(16, activation='relu', input_shape=(10,)),
tf.keras.layers.Dense(1)
])
# کامپایل مدل
model.compile(optimizer='adam', loss='mse')
# تولید دادههای ساختگی
data = np.random.random((1000, 10))
labels = np.random.randint(2, size=(1000, 1))
# آموزش مدل
model.fit(data, labels, epochs=10)
۳۲ PyTorch
ایدهٔ اصلی: به زبان ساده، توضیح: PyTorch یک کتابخانه یادگیری ماشین منبع باز است که توسط آزمایشگاه تحقیقاتی هوش مصنوعی فیسبوک توسعه یافته است. این کتابخانه به دلیل انعطافپذیریاش شناخته شده و برای یادگیری عمیق و محاسبات علمی استفاده میشود.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ابزارها برای deep learning هستند. برای مثالهای واقعی معمولاً به GPU و تنظیمات محیط نیاز دارید.
کِی به درد میخوره؟
- شبکههای عصبی برای CV/NLP و ...
- آموزش مدلهای بزرگتر با GPU.
- استقرار مدلها در سرویسها.
یه مثال سریع:
import torch
import torch.nn as nn
# تعریف یک مدل خطی ساده
model = nn.Linear(10, 1)
# ایجاد دادههای ورودی و خروجی تصادفی
x = torch.randn(1000, 10)
y = torch.randn(1000, 1)
# تعریف تابع هزینه و بهینهساز
loss_fn = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# حلقه آموزش
for t in range(100):
y_pred = model(x)
loss = loss_fn(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
۳۳ Keras
ایدهٔ اصلی: به زبان ساده، توضیح: Keras یک API سطح بالا برای شبکههای عصبی است که قادر به اجرا بر روی TensorFlow، CNTK یا Theano است. این API ساخت، آموزش و استقرار انواع مختلف مدلهای شبکه عصبی را آسان میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ابزارها برای deep learning هستند. برای مثالهای واقعی معمولاً به GPU و تنظیمات محیط نیاز دارید.
کِی به درد میخوره؟
- شبکههای عصبی برای CV/NLP و ...
- آموزش مدلهای بزرگتر با GPU.
- استقرار مدلها در سرویسها.
یه مثال سریع:
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
# تعریف یک مدل Sequential
model = Sequential([
Dense(16, activation='relu', input_shape=(10,)),
Dense(1)
])
# کامپایل مدل
model.compile(optimizer='adam', loss='mse')
# تولید دادههای ساختگی
data = np.random.random((1000, 10))
labels = np.random.randint(2, size=(1000, 1))
# آموزش مدل
model.fit(data, labels, epochs=10)
۳۴ معماریهای شبکه عصبی (Neural Network Architectures)
ایدهٔ اصلی: به زبان ساده، توضیح: معماریهای شبکه عصبی به طراحی و سازماندهی لایهها در یک شبکه عصبی اشاره دارد، مانند شبکههای عصبی کانولوشنی (CNNs)، شبکههای عصبی بازگشتی (RNNs) و شبکههای مولد تخاصمی (GANs).
ایدهٔ اصلی: به زبان ساده، مثال کد (CNN با Keras)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D((2, 2)),
Flatten(),
Dense(64, activation='relu'),
Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')
۳۵ یادگیری انتقالی (Transfer Learning)
ایدهٔ اصلی: به زبان ساده، توضیح: یادگیری انتقالی عمل شروع با یک مدل از پیش آموزشدیده و تطبیق آن با یک وظیفه جدید و مشابه است. این کار میتواند زمان آموزش را کاهش داده و عملکرد مدلهای شبکه عصبی را بهبود بخشد.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از مدل VGG16 از پیش آموزشدیده)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from keras.applications.vgg16 import VGG16
from keras.layers import GlobalAveragePooling2D, Dense
from keras.models import Model
# بارگذاری مدل VGG16 از پیش آموزشدیده + لایههای سطح بالاتر
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
predictions = Dense(1, activation='sigmoid')(x)
model = Model(inputs=base_model.input, outputs=predictions)
# ابتدا: فقط لایههای بالایی را آموزش دهید (که به طور تصادفی مقداردهی اولیه شدهاند)
for layer in base_model.layers:
layer.trainable = False
model.compile(optimizer='adam', loss='binary_crossentropy')
۳۶ یادگیری تقویتی (Reinforcement Learning)
ایدهٔ اصلی: به زبان ساده، توضیح: یادگیری تقویتی (RL) نوعی الگوریتم یادگیری ماشین است که بر اساس ایده یادگیری اقدامات بهینه از طریق آزمون و خطا است. عاملها در یک محیط برای رسیدن به یک هدف اقداماتی را انجام میدهند.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از Q-learning)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import numpy as np
# ماتریس انتقال ساختگی (حالت، اقدام) -> حالت بعدی
transition_matrix = [[0, 1], [0, 2], [1, 2]]
# مقداردهی اولیه جدول Q
Q = np.zeros((3, 2))
# فراپارامترها
alpha = 0.1
gamma = 0.9
# حلقه آموزش
for episode in range(1000):
state = 0
done = False
while not done:
action = np.random.choice([0, 1])
next_state = transition_matrix[state][action]
reward = 1 if next_state == 2 else 0
Q[state, action] = (1 - alpha) * Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state]))
state = next_state
if state == 2:
done = True
۳۷ پردازش زبان طبیعی (Natural Language Processing - NLP)
ایدهٔ اصلی: به زبان ساده، توضیح: پردازش زبان طبیعی (NLP) شامل کاربرد الگوریتمها برای شناسایی و استخراج قوانین زبان طبیعی به منظور درک، تفسیر و تولید زبانهای انسانی توسط کامپیوتر است.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از NLTK برای توکنسازی)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import nltk
# nltk.download('punkt') # در صورت نیاز
sentence = "Natural Language Processing is fascinating."
tokens = nltk.word_tokenize(sentence)
print(tokens) # خروجی: ['Natural', 'Language', 'Processing', 'is', 'fascinating', '.']
۳۸ عبارات منظم (Regular Expressions)
ایدهٔ اصلی: به زبان ساده، توضیح: عبارات منظم راهی برای جستجو، تطبیق و دستکاری رشتهها با استفاده از الگوها فراهم میکنند. آنها ابزاری قدرتمند برای پردازش متن هستند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import re
pattern = r"\d+" # یک یا چند رقم را تطبیق میدهد
result = re.findall(pattern, "The year is 2023.")
print(result) # خروجی: ['2023']
۳۹ محاسبات موازی (Parallel Computing)
ایدهٔ اصلی: به زبان ساده، توضیح: محاسبات موازی اجرای همزمان چندین محاسبه یا فرآیند است. این کار میتواند به طور قابل توجهی سرعت محاسبات را افزایش دهد.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از multiprocessing )
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from multiprocessing import Pool
def square_number(n):
return n * n
numbers = [1, 2, 3, 4]
with Pool() as pool:
results = pool.map(square_number, numbers)
print(results) # خروجی: [1, 4, 9, 16]
۴۰ محاسبات توزیعشده (Distributed Computing)
ایدهٔ اصلی: به زبان ساده، توضیح: محاسبات توزیعشده شامل همکاری چندین کامپیوتر برای حل یک مسئله محاسباتی است. Apache Spark معمولاً برای پردازش دادههای توزیعشده استفاده میشود.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از Apache Spark)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
# from pyspark import SparkContext
# sc = SparkContext("local", "Simple App")
# numbers = sc.parallelize([1, 2, 3, 4])
# squares = numbers.map(lambda x: x * x)
# print(squares.collect()) # خروجی: [1, 4, 9, 16]
۴۱ وب اسکرپینگ (Web Scraping)
ایدهٔ اصلی: به زبان ساده، توضیح: وب اسکرپینگ استخراج داده از وبسایتها است. کتابخانههایی مانند BeautifulSoup میتوانند اسناد HTML و XML را تجزیه کنند و اسکرپ کردن دادهها را آسانتر کنند.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از BeautifulSoup)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، وباسکرپینگ استخراج داده از وب است. به robots.txt و قوانین سایت احترام بگذارید و نرخ درخواست را محدود کنید.
کِی به درد میخوره؟
- جمعآوری دادههای عمومی برای تحلیل.
- مانیتورینگ محتوا/قیمت (اگر مجاز باشد).
- آرشیو کردن اطلاعات.
یه مثال سریع:
from bs4 import BeautifulSoup
import requests
url = "http://example.com"
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
title = soup.find('title')
print(title.text) # خروجی: Example Domain
۴۲ یکپارچهسازی API (API Integration)
ایدهٔ اصلی: به زبان ساده، توضیح: یکپارچهسازی API شامل تعامل با APIها برای بازیابی یا دستکاری دادهها است. اکثر APIهای مدرن دادهها را در قالب JSON بازمیگردانند.
ایدهٔ اصلی: به زبان ساده، مثال کد (درخواست داده JSON)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، در کار با APIها، علاوه بر درخواست، مدیریت خطا، timeout، retry و rate limit مهم است.
کِی به درد میخوره؟
- اتصال به سرویسهای بیرونی.
- ساخت کلاینت داخلی برای سرویسها.
- جمعآوری داده از API.
یه مثال سریع:
import requests
response = requests.get("https://jsonplaceholder.typicode.com/todos/1")
data = response.json()
print(data['title']) # خروجی: 'delectus aut autem'
۴۳ GraphQL
ایدهٔ اصلی: به زبان ساده، توضیح: GraphQL یک زبان پرسوجو و زمان اجرا برای APIها است که اولویت را به دادن دقیقاً دادههای درخواستی مشتریان و نه بیشتر میدهد.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از graphqlclient در پایتون)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
# from graphqlclient import GraphQLClient
# client = GraphQLClient('https://api.graph.cool/simple/v1/swapi')
# result = client.execute('''
# {
# allPersons {
# name
# }
# }
# ''')
# print(result)
۴۴ داکر (Docker)
ایدهٔ اصلی: به زبان ساده، توضیح: داکر پلتفرمی است که برای توسعه، ارسال و اجرای برنامهها در داخل کانتینرها استفاده میشود. یک Dockerfile نحوه ساخت کانتینر را تعریف میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد (Dockerfile ساده)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Docker بستهبندی برنامه و وابستگیها را استاندارد میکند و اجرا را در محیطهای مختلف یکسان نگه میدارد.
کِی به درد میخوره؟
- یکسانسازی محیط توسعه.
- استقرار سادهتر در CI/CD.
- ایزوله کردن وابستگیها.
یه مثال سریع:
FROM python:3.8
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "app.py"]
۴۵ کوبرنتیز (Kubernetes)
ایدهٔ اصلی: به زبان ساده، توضیح: کوبرنتیز یک سیستم ارکستراسیون برای خودکارسازی استقرار، مقیاسبندی و مدیریت برنامههای کانتینری است.
ایدهٔ اصلی: به زبان ساده، مثال کد (فایل YAML استقرار کوبرنتیز)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Kubernetes ارکستراسیون کانتینرهاست: مقیاسپذیری، self-healing، و استقرار مرحلهای.
کِی به درد میخوره؟
- مدیریت سرویسها در مقیاس بالا.
- rollout/rollback بدون downtime.
- مدیریت config و secretها.
یه مثال سریع:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
۴۶ محاسبات بدون سرور (Serverless Computing)
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: محاسبات بدون سرور به شما امکان میدهد کد را بدون تأمین یا مدیریت سرورها اجرا کنید. AWS Lambda یک پلتفرم محبوب بدون سرور است.
ایدهٔ اصلی: به زبان ساده، مثال کد (تابع AWS Lambda در پایتون)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
۴۷ چارچوبهای توسعه وب (Web Development Frameworks)
ایدهٔ اصلی: به زبان ساده، توضیح: چارچوبهای توسعه وب مانند Flask و Django با ارائه الگوهای کد قابل استفاده مجدد به ساخت برنامههای وب کمک میکنند.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از Flask)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
۴۸ APIهای RESTful
ایدهٔ اصلی: به زبان ساده، توضیح: APIهای RESTful (Representational State Transfer) امکان تعامل با منابع را از طریق عملیات بدون حالت فراهم میکنند. آنها از متدهای استاندارد HTTP مانند GET، POST، PUT، DELETE پیروی میکنند.
ایدهٔ اصلی: به زبان ساده، مثال کد (ایجاد یک نقطه پایانی RESTful با Flask)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، در کار با APIها، علاوه بر درخواست، مدیریت خطا، timeout، retry و rate limit مهم است.
کِی به درد میخوره؟
- اتصال به سرویسهای بیرونی.
- ساخت کلاینت داخلی برای سرویسها.
- جمعآوری داده از API.
یه مثال سریع:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/users/
', methods=['GET'])
def get_user(user_id):
user = {'id': user_id, 'name': 'Alice'} # دادههای نمونه
return jsonify(user)
if __name__ == '__main__':
app.run()
۴۹ APIهای GraphQL
ایدهٔ اصلی: به زبان ساده، توضیح: APIهای GraphQL یک زبان پرسوجوی انعطافپذیر ارائه میدهند که به مشتریان امکان میدهد دقیقاً دادههای مورد نیاز خود را درخواست کنند. این میتواند منجر به بازیابی کارآمدتر دادهها شود.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از Graphene با Flask)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، در کار با APIها، علاوه بر درخواست، مدیریت خطا، timeout، retry و rate limit مهم است.
کِی به درد میخوره؟
- اتصال به سرویسهای بیرونی.
- ساخت کلاینت داخلی برای سرویسها.
- جمعآوری داده از API.
یه مثال سریع:
# from flask import Flask
# from flask_graphql import GraphQLView
# import graphene
# class Query(graphene.ObjectType):
# hello = graphene.String()
# def resolve_hello(self, info):
# return "World"
# app = Flask(__name__)
# app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql',
# schema=graphene.Schema(query=Query)))
۵۰ ارتباط WebSocket
ایدهٔ اصلی: به زبان ساده، توضیح: WebSocketها کانالهای ارتباطی تمامدوطرفه (full-duplex) را بر روی یک اتصال TCP واحد فراهم میکنند و امکان بهروزرسانیهای بیدرنگ بین کلاینتها و سرورها را فراهم میکنند.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از WebSocket با Flask-SocketIO)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
# from flask import Flask, render_template
# from flask_socketio import SocketIO
# app = Flask(__name__)
# socketio = SocketIO(app)
# @app.route('/')
# def main():
# return render_template('index.html')
# @socketio.on('message')
# def handle_message(msg):
# print('Received message:', msg)
# if __name__ == '__main__':
# socketio.run(app)
۵۱ OAuth و احراز هویت
ایدهٔ اصلی: به زبان ساده، توضیح: OAuth یک پروتکل استاندارد برای تفویض دسترسی است که معمولاً به عنوان راهی برای کاربران برای اعطای دسترسی به اطلاعات خود در یک سایت به سایت دیگر استفاده میشود.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از Flask-OAuthlib)
ایدهٔ اصلی: به زبان ساده، (کد ارائه شده در تصویر یک مثال کامل برای این بخش است.)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
۵۲ امنیت API (API Security)
ایدهٔ اصلی: به زبان ساده، توضیح: امنیت API شامل پیادهسازی اقداماتی برای ایمنسازی APIها در برابر دسترسی غیرمجاز و حملات است. تکنیکها شامل احراز هویت مبتنی بر توکن، رمزگذاری و موارد دیگر است.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از Flask-JWT برای احراز هویت توکن)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، در کار با APIها، علاوه بر درخواست، مدیریت خطا، timeout، retry و rate limit مهم است.
کِی به درد میخوره؟
- اتصال به سرویسهای بیرونی.
- ساخت کلاینت داخلی برای سرویسها.
- جمعآوری داده از API.
یه مثال سریع:
# from flask import Flask, jsonify, request
# from flask_jwt import JWT, jwt_required
# app = Flask(__name__)
# app.config['SECRET_KEY'] = 'super-secret'
# def authenticate(username, password):
# # اعتبارسنجی کاربر
# return {'id': 1, 'username': 'user'}
# def identity(payload):
# return {'id': 1, 'username': 'user'}
# jwt = JWT(app, authenticate, identity)
# @app.route('/protected')
# @jwt_required()
# def protected():
# return jsonify({'message': 'This is a protected view.'})
۵۳ SQLAlchemy
ایدهٔ اصلی: به زبان ساده، توضیح: SQLAlchemy یک جعبه ابزار SQL و کتابخانه نگاشت شیء-رابطهای (ORM) برای پایتون است. این کتابخانه امکان تعامل با پایگاههای داده رابطهای را به روشی شیءگرا فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
engine = create_engine('sqlite:///users.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name='Alice')
session.add(new_user)
session.commit()
۵۴ پایگاههای داده NoSQL
ایدهٔ اصلی: به زبان ساده، توضیح: پایگاههای داده NoSQL دادهها را در قالبهای غیرجدولی مانند زوجهای کلید-مقدار، اسناد، گرافها یا فروشگاههای ستون-گسترده ذخیره میکنند. آنها میتوانند مقیاسپذیری و عملکرد بهتری را برای برخی از انواع دادهها ارائه دهند.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از MongoDB با PyMongo)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client['test_database']
collection = db['test_collection']
data = {'name': 'Alice', 'age': 30}
collection.insert_one(data)
for item in collection.find():
print(item)
۵۵ چندنخی (Multithreading)
ایدهٔ اصلی: به زبان ساده، توضیح: چندنخی شامل اجرای همزمان چندین نخ در یک فرآیند واحد است. این امکان اجرای کارآمد وظایف را، به ویژه برای کدهای وابسته به ورودی/خروجی یا کدهای شبکه ساختاریافته سطح بالا، فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از ماژول threading )
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import threading
def print_numbers():
for i in range(10):
print(i)
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_numbers)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
۵۶ چندپردازشی (Multiprocessing)
ایدهٔ اصلی: به زبان ساده، توضیح: چندپردازشی شامل اجرای همزمان چندین فرآیند است. برخلاف نخها، فرآیندها فضای حافظه را به اشتراک نمیگذارند. این میتواند برای وظایف وابسته به CPU مناسبتر باشد.
ایدهٔ اصلی: به زبان ساده، مثال کد (استفاده از ماژول multiprocessing )
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from multiprocessing import Process
def print_numbers():
for i in range(10):
print(i)
process1 = Process(target=print_numbers)
process2 = Process(target=print_numbers)
process1.start()
process2.start()
process1.join()
process2.join()
۵۷ دکوراتورها (Decorators)
ایدهٔ اصلی: به زبان ساده، توضیح: دکوراتورها راهی برای تغییر یا بهبود توابع در پایتون بدون تغییر کد آنها هستند. آنها اغلب برای لاگگیری، اعمال کنترل دسترسی، ابزار دقیق، کش کردن و غیره استفاده میشوند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، دکوراتورها به شما اجازه میدهند رفتار مشترک را بدون دستکاری منطق اصلی تابع اضافه کنید (مانند لاگگیری، زمانسنجی، کش).
کِی به درد میخوره؟
- Timing و profiling سریع توابع.
- Authorization و validation.
- Caching با `functools.lru_cache` یا دکوراتورهای سفارشی.
یه مثال سریع:
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
یه مثال بیشتر 1:
import time
from functools import wraps
def timing(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} took {end - start:.6f}s")
return result
return wrapper
@timing
def work():
return sum(range(100000))
work()
۵۸ لاگگیری (Logging)
ایدهٔ اصلی: به زبان ساده، توضیح: لاگگیری فرآیند ثبت پیامها برای درک جریان یک برنامه و تشخیص مشکلات است. ماژول لاگگیری داخلی پایتون راهی انعطافپذیر برای پیکربندی و تولید پیامهای لاگ فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، logging جایگزین print در پروژههاست و امکان سطحبندی و خروجیهای مختلف را فراهم میکند.
کِی به درد میخوره؟
- ثبت رویدادها برای مانیتورینگ.
- دیباگ در production با سطحهای مختلف.
- ارسال لاگ به فایل/سیستم مرکزی.
یه مثال سریع:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("This is an info message")
logger.warning("This is a warning message")
یه مثال بیشتر 1:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("app")
logger.info("Hello log!")
۵۹ مدیریت بسته (pip)
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: pip نصبکننده بسته برای پایتون است. این به شما امکان میدهد بستههای اضافی را که بخشی از کتابخانه استاندارد پایتون نیستند، نصب و مدیریت کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، بهتر است وابستگیها را در محیط مجازی نصب کنید و نسخهها را در فایل requirements یا ابزارهایی مثل Poetry مدیریت کنید.
کِی به درد میخوره؟
- نصب وابستگیها در CI.
- قفل کردن نسخهها برای جلوگیری از ناسازگاری.
- مدیریت توسعه/تولید.
یه مثال سریع:
pip install requests
۶۰ عملگر Walrus
ایدهٔ اصلی: به زبان ساده، توضیح: عملگر walrus ( := ) که در پایتون ۳.۸ معرفی شد، به شما امکان میدهد مقداری را به عنوان بخشی از یک عبارت به یک متغیر اختصاص دهید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
if (n := len([1, 2, 3])) > 2:
print(f"List has {n} elements.")
۶۱ ماژول dis
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: ماژول dis در پایتون به شما امکان میدهد بایتکد پایتون را دیساسمبل کنید، که میتواند برای درک جزئیات سطح پایین مفید باشد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import dis
def my_function():
a = 10
b = 20
return a + b
dis.dis(my_function)
۶۲ functools.lru_cache
ایدهٔ اصلی: به زبان ساده، توضیح: دکوراتور functools.lru_cache نتایج فراخوانیهای تابع را کش میکند و راهی ساده برای سرعت بخشیدن به توابعی که نتایج یکسانی را به طور مکرر محاسبه میکنند، فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from functools import lru_cache
@lru_cache
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
۶۳ عبارت else در حلقهها
ایدهٔ اصلی: به زبان ساده، توضیح: یک عبارت else بعد از یک حلقه (for/while) در صورتی اجرا میشود که حلقه به طور عادی به پایان برسد (یعنی بدون برخورد با عبارت break ).
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
for i in range(3):
print(i)
else:
print("Loop finished without break.")
۶۴ باز کردن پارامتر تابع (Function Parameter Unpacking)
ایدهٔ اصلی: به زبان ساده، توضیح: میتوانید از ستاره ( * ) برای باز کردن لیستها/تاپلها و از دو ستاره ( ** ) برای باز کردن دیکشنریها هنگام فراخوانی یک تابع استفاده کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، Unpacking یعنی عناصر یک iterable (مثل list/tuple) را به چند متغیر جداگانه نسبت دهید. در پایتون امکان «باز کردن توسعهیافته» با `*` هم وجود دارد.
کِی به درد میخوره؟
- وقتی میخواهید خروجی چندتایی یک تابع را به چند متغیر بدهید.
- وقتی میخواهید ابتدا/انتها را جدا و وسط را به صورت لیست نگه دارید.
- برای خواناتر کردن کد هنگام کار با دادههای ساختاریافته.
یه مثال سریع:
def function(a, b, c):
return a + b + c
args = [1, 2, 3]
print(function(*args)) # خروجی: 6
یه مثال بیشتر 1:
numbers = [10, 20, 30, 40, 50]
first, *middle, last = numbers
print(first) # 10
print(middle) # [20, 30, 40]
print(last) # 50
۶۵ ماژول ast
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول درخت نحو انتزاعی (Abstract Syntax Tree - ast ) در پایتون به شما امکان میدهد با کد منبع پایتون به صورت برنامهنویسی تعامل داشته باشید، مانند تحلیل، تغییر یا حتی تولید کد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import ast
source_code = 'a = 5 + 2'
parsed_code = ast.parse(source_code)
print(ast.dump(parsed_code))
۶۶ contextlib.suppress
ایدهٔ اصلی: به زبان ساده، توضیح: contextlib.suppress یک مدیر زمینه است که استثناهای مشخص شده را در صورت وقوع در داخل بلوک سرکوب میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from contextlib import suppress
with suppress(ZeroDivisionError):
result = 1 / 0
print("Code continues without raising an exception.")
۶۷ سربارگذاری عملگر (Operator Overloading)
ایدهٔ اصلی: به زبان ساده، توضیح: پایتون به کلاسها اجازه میدهد تا با پیادهسازی متدهای ویژه (مانند __add__ ، __mul__ ) رفتار سفارشی برای عملگرها تعریف کنند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
۶۸ ماژول array
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول array یک ساختار داده دنبالهای تعریف میکند که شبیه به لیست است اما عناصری از همان نوع را به روشی کارآمدتر از نظر حافظه ذخیره میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from array import array
arr = array('d', [1.0, 2.5, 3.1])
۶۹ مانکی پچینگ (Monkey Patching)
ایدهٔ اصلی: به زبان ساده، توضیح: مانکی پچینگ شامل تغییر یا گسترش کلاسها یا ماژولهای دیگر در زمان اجرا است، معمولاً برای اشکالزدایی یا بهبود عملکرد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
class SomeClass:
def greet(self):
return "Hello!"
def new_greet(self):
return "Hello (patched)!"
obj = SomeClass()
print(obj.greet()) # Hello
# مونکیپچ: جایگزینی متد در زمان اجرا
SomeClass.greet = new_greet
print(obj.greet()) # Hello (patched)
۷۰ مولدها با yield from
ایدهٔ اصلی: به زبان ساده، توضیح: با استفاده از yield from ، میتوانید بخشی از عملیات یک مولد را به مولد دیگری واگذار کنید و کد را سادهتر کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
def chain(*iterables):
for iterable in iterables:
yield from iterable
result = list(chain([1, 2], [3, 4])) # خروجی: [1, 2, 3, 4]
۷۱ ماژول shutil
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول shutil توابعی برای انجام عملیات فایل سطح بالا مانند کپی یا انتقال فایلها و دایرکتوریها فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import shutil
shutil.copyfile('source.txt', 'destination.txt')
۷۲ collections.Counter
ایدهٔ اصلی: به زبان ساده، توضیح: collections.Counter یک زیرکلاس از دیکشنری برای شمارش اشیاء قابل هش (hashable) است.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `collections.Counter` برای شمارش فراوانی آیتمها ساخته شده و امکاناتی مثل `most_common` دارد.
کِی به درد میخوره؟
- شمارش کلمات/حروف/آیتمها.
- یافتن پرتکرارترینها.
- ساخت آمار سریع بدون حلقهنویسی زیاد.
یه مثال سریع:
from collections import Counter
count = Counter(['a', 'b', 'c', 'a', 'b', 'b'])
print(count) # خروجی: Counter({'b': 3, 'a': 2, 'c': 1})
یه مثال بیشتر 1:
from collections import Counter
text = "banana"
c = Counter(text)
print(c.most_common(2)) # [('a', 3), ('n', 2)]
۷۳ ماژول pathlib
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول pathlib مجموعهای از کلاسها را برای مدیریت مسیرهای سیستم فایل ارائه میدهد و راهی شیءگراتر برای کار با مسیرهای فایل فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from pathlib import Path
path = Path('folder/file.txt')
print(path.exists())
۷۴ توصیفگرها (Descriptors)
ایدهٔ اصلی: به زبان ساده، توضیح: توصیفگرها راهی برای سفارشیسازی دسترسی به صفات با استفاده از متدهایی مانند __get__ ، __set__ و __delete__ فراهم میکنند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
class Descriptor:
def __get__(self, instance, owner):
print("Getting the attribute")
class MyClass:
attribute = Descriptor()
۷۵ ماژول heapq
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول heapq توابعی برای پیادهسازی هیپها (صفهای اولویت) بر اساس لیستهای معمولی فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import heapq
heap = [3, 1, 4, 1, 5]
heapq.heapify(heap)
print(heapq.heappop(heap)) # خروجی: 1
۷۶ عبارات نامگذاری شده با _
ایدهٔ اصلی: به زبان ساده، توضیح: در REPL (پوسته تعاملی)، میتوانید از _ برای دسترسی به نتیجه آخرین عبارت استفاده کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد (در REPL)
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
>>> 5 + 2
7
>>> _ + 3
10
۷۷ شمارشها با enum
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول enum راهی برای ایجاد شمارشها (enumerations) تعریف میکند، که مجموعهای از نامهای نمادین متصل به مقادیر ثابت منحصر به فرد هستند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
۷۸ محیطهای مجازی با venv
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول venv پشتیبانی از ایجاد محیطهای پایتون سبک و ایزوله را فراهم میکند، که هر کدام دایرکتوریهای نصب و وابستگیهای خود را دارند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، venv محیط مجازی سبک استاندارد پایتون است. وابستگیهای پروژه را از سیستم جدا میکند.
کِی به درد میخوره؟
- جلوگیری از تداخل نسخهها بین پروژهها.
- راهاندازی سریع پروژه روی سیستم جدید.
- بهبود reproducibility.
یه مثال سریع:
python3 -m venv myenv
۷۹ ماژول queue
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول queue راهی برای ایجاد صفهای امن در محیط چندنخی (thread-safe) فراهم میکند که برای ارتباط ایمن بین نخها استفاده میشوند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from queue import Queue
q = Queue()
q.put('item')
item = q.get()
۸۰ ماژول dataclasses
ایدهٔ اصلی: به زبان ساده، توضیح: dataclasses که در پایتون ۳.۷ معرفی شد، یک دکوراتور و توابعی برای افزودن خودکار متدهای ویژه به کلاسها فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
۸۱ توابع بازگشتی (Recursive Functions)
ایدهٔ اصلی: به زبان ساده، توضیح: توابع بازگشتی به عنوان بخشی از اجرای خود، خود را فراخوانی میکنند و اغلب برای مسائلی که میتوانند به زیرمسائل سادهتر تقسیم شوند، استفاده میشوند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
۸۲ ماژول itertools
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول itertools مجموعهای از ابزارهای سریع و کارآمد از نظر حافظه برای کار با تکرارکنندهها مانند combinations ، permutations و groupby فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `itertools` ابزارهای قدرتمند برای کار با iteratorها میدهد. این ابزارها معمولاً lazy هستند و برای پردازش دادههای بزرگ مناسباند.
کِی به درد میخوره؟
- ساخت ترکیبها (combinations) و جایگشتها (permutations).
- زنجیره کردن iterableها بدون ساخت لیست جدید.
- گروهبندی دادههای مرتبشده با `groupby`.
یه مثال سریع:
from itertools import combinations
comb = combinations([1, 2, 3], 2)
print(list(comb)) # خروجی: [(1, 2), (1, 3), (2, 3)]
یه مثال بیشتر 1:
import itertools
for comb in itertools.combinations([1, 2, 3, 4], 2):
print(comb)
۸۳ استفاده از locals() و globals()
ایدهٔ اصلی: به زبان ساده، توضیح: تابع locals() یک دیکشنری از فضای نام فعلی را برمیگرداند و globals() یک دیکشنری از فضای نام سراسری را برمیگرداند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `globals()` و `locals()` دیکشنری فضای نام را میدهند. برای دیباگ و کارهای پویا مفیدند، ولی استفاده زیاد در کدهای معمولی توصیه نمیشود.
کِی به درد میخوره؟
- دیباگ و مشاهده متغیرهای موجود.
- نوشتن ابزارهای آموزشی/تحلیلی.
- پیادهسازی سیستمهای پویا با طراحی مناسب.
یه مثال سریع:
def my_function():
x = 10
print(locals())
my_function() # خروجی: {'x': 10}
یه مثال بیشتر 1:
x = 1
def demo():
y = 2
print("locals:", locals())
print("x in globals:", "x" in globals())
demo()
۸۴ کوروتینها با yield
ایدهٔ اصلی: به زبان ساده، توضیح: کوروتینها شکل کلیتری از زیرروالها هستند. میتوان با استفاده از کلمه کلیدی yield در نقاط مختلف وارد، خارج و از سر گرفته شوند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
def my_coroutine():
while True:
received = yield
print('Received:', received)
coro = my_coroutine()
next(coro)
coro.send(42) # خروجی: Received: 42
۸۵ zip_longest از itertools
ایدهٔ اصلی: به زبان ساده، توضیح: zip_longest تکرارپذیرهای ورودی را zip میکند و مقادیر گمشده را با یک مقدار پرکننده مشخص پر میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، `itertools` ابزارهای قدرتمند برای کار با iteratorها میدهد. این ابزارها معمولاً lazy هستند و برای پردازش دادههای بزرگ مناسباند.
کِی به درد میخوره؟
- ساخت ترکیبها (combinations) و جایگشتها (permutations).
- زنجیره کردن iterableها بدون ساخت لیست جدید.
- گروهبندی دادههای مرتبشده با `groupby`.
یه مثال سریع:
from itertools import zip_longest
result = zip_longest([1, 2], [3, 4, 5], fillvalue=0)
print(list(result)) # خروجی: [(1, 3), (2, 4), (0, 5)]
یه مثال بیشتر 1:
import itertools
for comb in itertools.combinations([1, 2, 3, 4], 2):
print(comb)
۸۶ unittest.mock
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: unittest.mock ابزارهایی برای شبیهسازی (mocking) اشیاء در تستهای واحد فراهم میکند و به شما امکان میدهد بخشهایی از سیستم تحت تست خود را با اشیاء شبیهسازی شده جایگزین کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from unittest.mock import MagicMock
mock = MagicMock(return_value=42)
print(mock()) # خروجی: 42
۸۷ چندنخی با ماژول threading
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول threading برنامهنویسی همزمان را با استفاده از نخها امکانپذیر میسازد و اجازه میدهد چندین عملیات به طور همزمان اجرا شوند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import threading
def print_numbers():
for i in range(5):
print(i)
thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()
۸۸ صفت __slots__
ایدهٔ اصلی: به زبان ساده، توضیح: __slots__ صفتی است که میتوانید به یک کلاس اضافه کنید تا با جلوگیری از ایجاد پویای صفات، در حافظه صرفهجویی کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
class MyClass:
__slots__ = ['name', 'age']
def __init__(self, name, age):
self.name = name
self.age = age
۸۹ عملگرهای بیتی (Bitwise Operators)
ایدهٔ اصلی: به زبان ساده، توضیح: عملگرهای بیتی امکان دستکاری بیتهای منفرد در یک عدد صحیح را فراهم میکنند، مانند AND بیتی ( & )، OR ( | ) و XOR ( ^ ).
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
x = 5 # باینری: 101
y = 3 # باینری: 011
print(x & y) # خروجی: 1 (باینری: 001)
۹۰ ماژولهای bz2 و gzip
ایدهٔ اصلی: به زبان ساده، توضیح: این ماژولها ابزارهایی برای کار با فایلهای فشرده با استفاده از فرمتهای فایل bzip2 و gzip فراهم میکنند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import bz2
content = b"Compress this content"
compressed_content = bz2.compress(content)
۹۱ اشیاء memoryview
ایدهٔ اصلی: به زبان ساده، توضیح: memoryview به شما دسترسی به حافظه مشترک دادهها را بدون کپی کردن آن میدهد و امکان دستکاری کارآمد مجموعههای داده بزرگ را فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
data = bytearray(b"Hello, world!")
view = memoryview(data)
chunk = view[7:13]
print(bytes(chunk)) # خروجی: b'world!'
۹۲ زنجیرهسازی استثنا (Exception Chaining)
ایدهٔ اصلی: به زبان ساده، توضیح: در پایتون ۳، میتوانید از کلمه کلیدی from برای زنجیرهسازی استثناها استفاده کنید، که به درک رابطه علت و معلولی بین استثناها کمک میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
try:
int("not_a_number")
except ValueError as e:
raise TypeError("Something went wrong") from e
۹۳ هشدارهای منسوخ شدن با warnings
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول warnings به شما امکان میدهد به کاربران در مورد تغییرات در کد یا منسوخ شدنها هشدار دهید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import warnings
def old_function():
warnings.warn("This function is deprecated", DeprecationWarning)
۹۴ متغیرهای زمینه با contextvars
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول contextvars متغیرهای زمینه را فراهم میکند، که متغیرهایی هستند که بسته به زمینه خود مقادیر متفاوتی دارند، مانند درون نخها یا وظایف ناهمگام مختلف.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
from contextvars import ContextVar
var = ContextVar('var', default='default value')
۹۵ متد as_integer_ratio
ایدهٔ اصلی: به زبان ساده، توضیح: اشیاء float متدی به نام as_integer_ratio دارند که یک جفت عدد صحیح را برمیگرداند که عدد ممیز شناور را به صورت یک کسر نشان میدهد.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
x = 0.75
print(x.as_integer_ratio()) # خروجی: (3, 4)
۹۶ ماژول cmd برای برنامههای CLI
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول cmd یک چارچوب ساده برای ساخت رابطهای خط فرمان (CLI) فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import cmd
class MyShell(cmd.Cmd):
def do_greet(self, line):
print("Hello, World!")
shell = MyShell()
shell.cmdloop()
۹۷ دکوراتورهای Property
ایدهٔ اصلی: به زبان ساده، میتوانید توضیح: دکوراتورهای Property ( @property ، @ .setter و @ .deleter ) به شما امکان میدهند صفات یک کلاس را از طریق متدها مدیریت کنید.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، دکوراتورها به شما اجازه میدهند رفتار مشترک را بدون دستکاری منطق اصلی تابع اضافه کنید (مانند لاگگیری، زمانسنجی، کش).
کِی به درد میخوره؟
- Timing و profiling سریع توابع.
- Authorization و validation.
- Caching با `functools.lru_cache` یا دکوراتورهای سفارشی.
یه مثال سریع:
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
یه مثال بیشتر 1:
import time
from functools import wraps
def timing(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} took {end - start:.6f}s")
return result
return wrapper
@timing
def work():
return sum(range(100000))
work()
۹۸ ماژول codecs
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول codecs توابعی برای رمزگذاری و رمزگشایی دادهها، از جمله مدیریت رمزگذاریهای مختلف متن، فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، این ترفند یکی از قابلیتهای کاربردی پایتون است که معمولاً برای کوتاهتر شدن کد و افزایش خوانایی استفاده میشود. بهتر است همیشه بین «کوتاهنویسی» و «خوانایی برای تیم» تعادل برقرار کنید.
کِی به درد میخوره؟
- کاهش کد تکراری و سادهتر شدن پیادهسازی.
- افزایش خوانایی با استفاده از امکانات استاندارد زبان.
- نوشتن کد قابل نگهداریتر و تمیزتر.
یه مثال سریع:
import codecs
encoded = codecs.encode('text', 'base64')
print(encoded) # خروجی: b'dGV4dA==\n'
۹۹ اصطلاح __main__ پایتون
ایدهٔ اصلی: به زبان ساده، توضیح: اصطلاح if __name__ == "__main__" به شما امکان میدهد کدی بنویسید که هم توسط برنامههای دیگر از طریق import قابل استفاده باشد و هم به صورت مستقل اجرا شود.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، الگوی `if __name__ == '__main__':` باعث میشود فایل هم قابل import باشد و هم وقتی مستقیم اجرا شد، بخش main اجرا شود.
کِی به درد میخوره؟
- نوشتن ماژول قابل reuse.
- جلوگیری از اجرای ناخواسته کد هنگام import.
- ساخت CLI ساده در یک فایل.
یه مثال سریع:
def main():
print("This script is running standalone")
if __name__ == "__main__":
main()
یه مثال بیشتر 1:
def main():
print("Run as script")
if __name__ == "__main__":
main()
۱۰۰ ماژول inspect
ایدهٔ اصلی: به زبان ساده، توضیح: ماژول inspect چندین تابع مفید برای به دست آوردن اطلاعات در مورد اشیاء زنده مانند ماژولها، کلاسها، متدها و غیره فراهم میکند.
ایدهٔ اصلی: به زبان ساده، مثال کد.
یه کم بیشتر: اگر بخواهیم دقیقتر بگوییم، ماژول `inspect` برای introspection است: امضای توابع، سورس کد، ماژولها و ...
کِی به درد میخوره؟
- دیباگ و ابزارسازی.
- نوشتن decoratorهایی که امضا مهم است.
- ساخت سیستمهای plugin و مستندسازی خودکار.
یه مثال سریع:
import inspect
def my_function():
pass
print(inspect.isfunction(my_function)) # خروجی: True
یه مثال بیشتر 1:
import inspect
def add(a, b=1):
return a + b
print(inspect.signature(add)) # (a, b=1)