توابع کمتر شناختهشده اما قدرتمند پایتون که باید بشناسید

ما برنامهنویسها معمولاً به استفاده از توابع آشنا و تکراری پایتون عادت کردهایم. حتی گاهی بهجای بررسی گزینههای موجود، مستقیم میرویم سراغ نوشتن تابع جدید! اما کتابخانه استاندارد پایتون پر از ابزارهای مفید و توابع پایتون است که به دلایل مختلف نادیده گرفته میشوند!
در این مقاله از آیکد آکادمی، به چند مورد از توابع کمتر استفادهشدهی پایتون نگاهی میاندازیم که واقعاً لایق توجه بیشتری هستند. بیایید شروع کنیم!
۱. bisect
— مدیریت لیستهای مرتب
ماژول bisect
زمانی کاربرد دارد که با لیستهای مرتب سروکار دارید. این ماژول به شما کمک میکند تا:
محل مناسب برای درج مقدار جدید در لیست مرتب را پیدا کنید.
بدون از دست رفتن ترتیب، مقدار جدیدی را درج کنید.
محدودههای مشخص (مثلاً نمرهها) را دستهبندی کنید.
مثال:
from bisect import bisect_left, bisect_right, insort
grades = [60, 70, 75, 85, 90, 95]
new_grade = 82
# Find the insertion position
position = bisect_left(grades, new_grade)
print(f"Insert 82 at position: {position}")
# Insert the value into the sorted list
insort(grades, new_grade)
print(f"Grades after insertion: {grades}")
# Categorize grades into letters
def grade_to_letter(score):
breakpoints = [60, 70, 80, 90]
letters = 'FDCBA'
position = bisect_right(breakpoints, score)
return letters[position]
print(f"Score 82 gets grade: {grade_to_letter(82)}")
print(f"Score 75 gets grade: {grade_to_letter(75)}")
📤 خروجی:
Insert 82 at position: 3
Grades after insertion: [60, 70, 75, 82, 85, 90, 95]
Score 82 gets grade: B
Score 75 gets grade: C
۲. itertools.pairwise
— بررسی دادههای متوالی
تابع pairwise
از ماژول itertools
برای پردازش دادههای متوالی بسیار کاربردی است. مثلاً برای:
تحلیل روند تغییرات،
محاسبه اختلاف بین دو عنصر متوالی،
یا محاسبه میانگینهای متحرک.
مثال:
from itertools import pairwise
temperatures = [20, 23, 24, 25, 23, 22, 20]
# Temperature changes
changes = [curr - prev for prev, curr in pairwise(temperatures)]
print("Temperature changes:", changes)
# Moving averages
moving_averages = [(a + b)/2 for a, b in pairwise(temperatures)]
print("Moving averages:", moving_averages)
# Largest temperature jump
max_jump = max(abs(b - a) for a, b in pairwise(temperatures))
print(f"Largest temperature change: {max_jump} degrees")
📤 خروجی:
Temperature changes: [3, 1, 1, -2, -1, -2]
Moving averages: [21.5, 23.5, 24.5, 24.0, 22.5, 21.0]
Largest temperature change: 3 degrees
۳. statistics.fmean
— میانگین سریعتر و دقیقتر
تابع fmean
از ماژول statistics
برای محاسبه میانگین اعشاری بسیار سریعتر و دقیقتر از mean()
عمل میکند، مخصوصاً روی دیتاستهای بزرگ.
مقایسه:
from statistics import mean, fmean
import time
temperatures = [21.5, 22.1, 23.4, 22.8, 21.8, 23.2, 22.7, 23.1, 22.6, 21.9] * 100000
start = time.perf_counter()
regular_mean = mean(temperatures)
regular_time = time.perf_counter() - start
start = time.perf_counter()
fast_mean = fmean(temperatures)
fast_time = time.perf_counter() - start
print(f"Regular mean: {regular_mean:.10f} (took {regular_time:.4f} seconds)")
print(f"fmean: {fast_mean:.10f} (took {fast_time:.4f} seconds)")
📤 خروجی:
Regular mean: 22.5100000000 (took 0.4748 seconds)
fmean: 22.5100000000 (took 0.0164 seconds)
۴. itertools.takewhile
— توقف بر اساس شرط
تابع takewhile
تا زمانی که شرط برقرار است، عناصر را از iterable برمیگرداند. برای فیلتر کردن لیستهایی که باید تا زمان مشخصی پردازش شوند، ایدهآل است.
مثال:
from itertools import takewhile
log_entries = [
"INFO: System started",
"INFO: Loading data",
"INFO: Processing users",
"ERROR: Database connection failed",
"INFO: Retrying connection",
]
normal_logs = list(takewhile(lambda x: not x.startswith("ERROR"), log_entries))
print("Logs before first error:")
for entry in normal_logs:
print(entry)
📤 خروجی:
Logs before first error:
INFO: System started
INFO: Loading data
INFO: Processing users
۵. operator.attrgetter
— دسترسی سریع به ویژگیهای تو در تو
تابع attrgetter
از ماژول operator
امکان دسترسی سریع، خوانا و قابل ترکیب به ویژگیهای تو در تو در اشیاء را فراهم میکند.
مثال:
from operator import attrgetter
from datetime import datetime
class Article:
def __init__(self, title, author, views, date):
self.title = title
self.author = author
self.stats = type('Stats', (), {'views': views})
self.date = date
def __repr__(self):
return f"{self.title} by {self.author}"
articles = [
Article("Python Tips", "Alice", 1500, datetime(2025, 1, 15)),
Article("Data Science", "Bob", 2500, datetime(2025, 1, 20)),
Article("Web Dev", "Alice", 1800, datetime(2025, 1, 10))
]
# Sorting by author and views
sorted_articles = sorted(articles, key=attrgetter('author', 'stats.views'))
for article in sorted_articles:
print(article)
📤 خروجی:
Python Tips by Alice
Web Dev by Alice
Data Science by Bob
نتیجهگیری
با شناخت و استفاده از این توابع پایتون، میتوانید کدهای خود را:
سریعتر،
تمیزتر،
و حرفهایتر بنویسید.
فرقی نمیکند تازهکار باشید یا حرفهای؛ شناخت ابزارهایی که در زبان هست ولی کمتر به آنها توجه میشود، همیشه ارزشمند است.
اگر دوست دارید این مجموعه با مثالهای بیشتری ادامه پیدا کنه، توی نظرات به ما بگید! 🐍💡
دیدگاهتان را بنویسید