همه ما تجربه نوشتن کدی را داشتهایم که اجرای آن به نظر ابدی میرسد. در دنیای واقعی، سرعت کد فقط یک موضوع آکادمیک نیست؛ تفاوت بین یک وبسایت کند و یک وبسایت سریع، یا یک تحلیل داده چند ساعته و چند دقیقهای، دقیقاً در همین بهینهسازیها نهفته است.
خبر خوب این است که برای افزایش سرعت کدهای پایتون، همیشه نیاز به الگوریتمهای پیچیده ندارید. در این مقاله، ۵ تکنیک ساده اما فوقالعاده مؤثر برای افزایش سرعت کدهای پایتون را با مثالهای عملی «قبل و بعد» به شما نشان میدهیم که میتوانید بلافاصله از آنها استفاده کنید.
آنچه در این مقاله میخوانید ....
Toggleانتخاب ساختار داده مناسب: اولین قدم برای افزایش سرعت کدهای پایتون
مهمترین و پایهایترین قدم برای نوشتن کد سریع، انتخاب ظرف مناسب برای دادههایتان است. انتخاب اشتباه در اینجا میتواند پرهزینهترین اشتباه شما باشد.
سناریو: بررسی وجود یک آیتم در یک لیست بزرگ
روش کند: استفاده از لیست (List)
وقتی شما در یک لیست به دنبال یک آیتم میگردید، پایتون مجبور است از اول تا آخر لیست را یکی یکی چک کند. اگر لیست شما میلیونها آیتم داشته باشد، این فرآیند بسیار کند خواهد بود.
python
# کد کند: جستجو در لیست
import time
# یک لیست بزرگ با ۱۰ میلیون عدد
large_list = list(range(10000000))
search_item = 9999999
start_time = time.time()
if search_item in large_list:
pass
end_time = time.time()
print(f"زمان جستجو در لیست: {end_time - start_time:.6f} ثانیه")
# خروجی احتمالی: زمان جستجو در لیست: 0.123456 ثانیه
Pythonروش سریع: استفاده از مجموعه (Set)
مجموعهها (Sets) در پایتون برای عملیات جستجو به شدت بهینه شدهاند. آنها از یک مکانیزم به نام «هشینگ» استفاده میکنند که پیدا کردن یک آیتم را تقریباً آنی میکند، فارغ از اندازه مجموعه.
Python
# کد سریع: جستجو در مجموعه
import time
# تبدیل لیست به مجموعه
large_set = set(range(10000000))
search_item = 9999999
start_time = time.time()
if search_item in large_set:
pass
end_time = time.time()
print(f"زمان جستجو در مجموعه: {end_time - start_time:.6f} ثانیه")
# خروجی احتمالی: زمان جستجو در مجموعه: 0.000001 ثانیه
Pythonنتیجه: برای کارهایی که نیاز به جستجوی مکرر دارید، همیشه از Set یا Dictionary به جای List استفاده کنید.
استفاده از توابع داخلی (Built-in Functions)
پایتون پر از توابع داخلی بهینه است که با زبان C نوشته شدهاند و بسیار سریعتر از حلقههایی هستند که ما خودمان مینویسیم. قبل از نوشتن یک حلقه، همیشه از خود بپرسید: «آیا پایتون راه آمادهای برای این کار ندارد؟»
سناریو: جمع کردن اعداد یک لیست
روش کند: استفاده از حلقه for
این روش کاملاً درست کار میکند، اما بهینه نیست.
Python
# کد کند: جمع کردن با حلقه for
numbers = list(range(10000000))
total = 0
start_time = time.time()
for number in numbers:
total += number
end_time = time.time()
print(f"زمان جمع با حلقه: {end_time - start_time:.6f} ثانیه")Pythonروش سریع: استفاده از تابع sum()
تابع داخلی sum() برای همین کار ساخته شده و بسیار سریعتر است.
Python
# کد سریع: استفاده از تابع sum()
numbers = list(range(10000000))
start_time = time.time()
total = sum(numbers)
end_time = time.time()
print(f"زمان جمع با تابع sum(): {end_time - start_time:.6f} ثانیه")Pythonنتیجه: همیشه توابع داخلی پایتون را به حلقههای دستی ترجیح دهید. برای محاسبات عددی سنگینتر، کتابخانههایی مانند NumPy سرعت را صدها برابر بیشتر میکنند.
پروفایل کردن کد برای پیدا کردن گلوگاهها (Profiling)
یکی از مهمترین اصول در افزایش سرعت کدهای پایتون این است که به جای حدس زدن، کندترین بخش کد را اندازهگیری کنیم. قانون ۸۰/۲۰ میگوید که ۸۰٪ از زمان اجرای برنامه، صرف اجرای ۲۰٪ از کد میشود. وظیفه ما پیدا کردن همان ۲۰٪ کند است. پایتون یک ابزار داخلی عالی به نام cProfile برای این کار دارد.
Python
# نحوه استفاده از cProfile
import cProfile
def some_slow_function():
# یک تابع کند فرضی
total = 0
for i in range(10**6):
total += i
return total
def some_fast_function():
# یک تابع سریع فرضی
return sum(range(10**6))
def main():
some_slow_function()
some_fast_function()
# اجرای پروفایلر روی تابع اصلی
cProfile.run('main()')Pythonپس از اجرای این کد، cProfile به شما یک گزارش دقیق میدهد که نشان میدهد هر تابع چند بار فراخوانی شده و چقدر زمان صرف اجرای آن شده است. با این گزارش، شما دقیقاً میدانید که باید کدام بخش از کدتان را بهینه کنید.
استفاده از List Comprehensions
کدنویسی «پایتونیک» نه تنها خواناتر است، بلکه اغلب سریعتر هم هست. List Comprehensions یک راه بسیار سریع و خلاصه برای ساختن لیستهاست.
سناریو: ساختن لیستی از مربع اعداد
روش کند: استفاده از حلقه for و append()
Python
# کد کند: ساختن لیست با حلقه
squares = []
start_time = time.time()
for i in range(10000000):
squares.append(i * i)
end_time = time.time()
print(f"زمان ساخت لیست با حلقه: {end_time - start_time:.6f} ثانیه")Pythonروش سریع: استفاده از List Comprehension
این روش نه تنها کوتاهتر است، بلکه به دلیل بهینهسازیهای داخلی پایتون، سریعتر نیز اجرا میشود. و افزایش سرعت کدهای پایتون خود را به چشم ببینید
Python
# کد سریع: ساختن لیست با List Comprehension
start_time = time.time()
squares = [i * i for i in range(10000000)]
end_time = time.time()
print(f"زمان ساخت لیست با List Comprehension: {end_time - start_time:.6f} ثانیه")Pythonکش کردن نتایج (Caching)
اگر یک تابع را با ورودیهای یکسان، چند بار فراخوانی میکنید، چرا باید هر بار محاسبات آن را از نو انجام دهید؟ کش کردن (Caching) یعنی ذخیره کردن نتیجه یک محاسبه تا در دفعات بعدی از همان نتیجه آماده استفاده کنیم.
سناریو: محاسبه یک تابع سنگین (مانند فیبوناچی)
روش کند: تابع بازگشتی بدون کش
این تابع برای اعداد بزرگ بسیار کند است، چون محاسبات تکراری زیادی انجام میدهد.
Python
# کد کند: فیبوناچی بدون کش
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
start_time = time.time()
fibonacci(35) # برای n=35 اجرای این کد چند ثانیه طول میکشد
end_time = time.time()
print(f"زمان محاسبه بدون کش: {end_time - start_time:.6f} ثانیه")Pythonروش سریع: استفاده از دکوراتور @lru_cache
کتابخانه داخلی functools یک ابزار جادویی به نام @lru_cache دارد. با اضافه کردن این یک خط کد بالای تعریف تابع، پایتون به صورت خودکار نتایج را برای شما کش میکند.
Python
# کد سریع: فیبوناچی با کش
from functools import lru_cache
@lru_cache(maxsize=None) # maxsize=None یعنی محدودیتی برای کش وجود ندارد
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
start_time = time.time()
fibonacci(35) # اجرای این کد تقریباً آنی است!
end_time = time.time()
print(f"زمان محاسبه با کش: {end_time - start_time:.6f} ثانیه")Python
نتیجهگیری نهایی برای افزایش سرعت کد های پایتون
بهینهسازی یک مهارت است که با تمرین به دست میآید. این ۵ روش ساده، نقطه شروعی عالی برای افزایش سرعت کدهای پایتون و نوشتن کدهای کارآمدتر هستند.
تسلط بر این تکنیکها و مفاهیم پیشرفتهتر، بخش کلیدی [دورههای پروژه محور پایتون و برنامه نویسی هوش مصنوعی در رایا اسکیلز] است، جایی که شما یاد میگیرید چگونه این دانش (افزایش سرعت کدهای پایتون) را در پروژههای دنیای واقعی به کار ببرید.



