با این ترفندها کد Python 10x خود را سریعتر کنید

1 __slots__
class Person:
__slots__ = ['name', 'age']
چرا از این ترفند استفاده می کنیم؟:
-
استفاده از حافظه را کاهش دهید: پایتون معمولاً از a استفاده می کند
__dict__
برای ذخیره ویژگی های شی ، که منابع بیشتری را مصرف می کند و کند است. -
دسترسی سریعتر ویژگی: با
__slots__
، پایتون از یک آرایه استاتیک استفاده می کند و کلید Find را از بین می برد. - هنگام ایجاد میلیون ها نمونه مفید است پردازش داده ها ، ETL ، علم داده.
2. عبارات ژنراتور ((x for x in ...)
)
sum(x**2 for x in range(1_000_000))
چرا از این ترفند استفاده می کنیم؟:
-
از ایجاد لیست های موقت خودداری کنید:
sum([x**2 for x in ...])
ابتدا لیستی را در حافظه ایجاد می کند ، سپس عملکرد SUM را اعمال می کند. - استفاده از حافظه را کاهش دهید: هنگام ایجاد مجموعه داده های بزرگ مفید است.
3. functools.lru_cache
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
return fib(n-1) + fib(n-2) if n > 1 else n
چرا از این ترفند استفاده می کنیم؟:
- از نتایج محاسبه مجدد خودداری کنید: مقادیر مربوط به همان پارامترها را ذخیره کنید.
- توابع خالص (همان ورودی → یک خروجی مشابه): ایده آل برای الگوریتم های بازگشتی مانند Fibonacci ، جستجو در درخت.
4. بردار با Numpy
import numpy as np
arr = np.array([1, 2, 3])
result = arr * 2
چرا از این ترفند استفاده می کنیم؟:
- عملیات بهینه شده در C: numpy عملیات را در بلوک های حافظه متناقض (آرایه ها در C) ، بدون حلقه در پایتون اجرا کنید.
- دور زدن گیل: عملیات مستقیماً روی داده های بدون حلقه های پایتون اعمال می شود.
5. تدوین سیتون
# example.pyx (Cython)
def sum(int a, int b):
return a + b
چرا از این ترفند استفاده می کنیم؟:
- کد پایتون را به C تبدیل می کند: Cython کد را در پسوندهای بومی C جمع می کند.
-
انواع استاتیک باعث افزایش کارایی می شود: انواع را اعلام کنید (
int
باfloat
) ، از تایپ پویا پایتون خودداری کنید. - محاسبات ریاضی سریعتر: 100x عملیات ریاضی سریعتر.
6 collections.defaultdict
برای فرهنگ لغت
from collections import defaultdict
count = defaultdict(int) # Initialize values by default
count["word"] += 1
چرا از این ترفند استفاده می کنیم؟:
-
اگر کلید را در بررسی های DICT کلید کنید ، خودداری کنید: در یک دیکتال عادی ، آیا ابتدا کلید وجود دارد یا خیر.
defaultdict
این کار را برای شما انجام دهید -
کمتر تماس به توابع: کارآمدتر
dict.setdefault()
یاtry/except KeyError
بشر
7. هماهنگی با str.join()
"".join(str_list)
چرا از این ترفند استفاده می کنیم؟:
-
رشته ها تغییر ناپذیر هستند: در پایتون ، هرکدام
+=
یک شیء رشته جدید ایجاد کنید (این فرآیند o (n²) است). -
join()
حافظه از پیش تعیین شده: به هر مورد در یک عمل فقط بپیوندید (این فرآیند O (n) است).
بهبود عملکرد
حصیر | بهبودی | مورد استفاده ایده آل |
---|---|---|
__slots__ |
20-30 ٪ ~ سریعتر | دست زدن به نمونه های شیء مالپل |
ژنراتور | 2-5x (در حافظه) | پردازش داده های بزرگ |
lru_cache |
10-100x (سرعت) | توابع بازگشتی |
اعماق | 10-1000x | عملیات ماتریس |
سیتون | 10-100x | حلقه های ریاضی سنگین |
defaultdict |
2 برابر | شمارش |
فرکانس | ||
str.join() |
10-100x (بزرگ N) | هماهنگی های متن جمعی |
سازگاری توسط نسخه پایتون
1 __slots__
- نسخه های سازگار: Python 2.7 و تمام نسخه های Python 3.x (3.0+).
- جزئیات: در تمام نسخه های مدرن یکسان است.
2. عبارات ژنراتور ((x for x in ...)
)
- نسخه های سازگار: Python 2.4+ (اما در Python 3.x بهینه شده است).
-
پیشرفت در پایتون 3:
- ژنراتورها در پایتون 3 از حافظه بیشتری برخوردار هستند.
-
range()
در پایتون 3 در حال حاضر یک ژنراتور است (در پایتون 2 ، لیستی بود).
3 functools.lru_cache
-
نسخه های سازگار:
- Python 3.2+ (گنجانده شده در کتابخانه استاندارد).
- Python 2.7 نیاز دارد
pip install functools32
بشر
-
تغییرات در Python 3.8+:
- جدید
user_function
پارامتر برای سفارشی سازی.
- جدید
4. بردار با Numpy
- نسخه های سازگار: Python 2.7 و Python 3.x (برای Python 3.7+ به Numpy 1.16 نیاز دارد).
- توصیه: برای Python 3.9+ (پشتیبانی بهتر) از numpy ≥ 1.19 استفاده کنید.
5. Cython
-
نسخه های سازگار:
- Python 2.7 (پشتیبانی از Cython 0.29.x).
- Python 3.x (برای Python 3.11+ به Cython ≥ 3.0 نیاز دارد).
-
مهم:
- پایتون 3.11+ مترجم را بهینه کرده و شکاف عملکرد بین بومی پایتون و سیتون را در برخی موارد کاهش داده است.
6 collections.defaultdict
- نسخه های سازگار: Python 2.5+ و تمام نسخه های Python 3.x.
- هیچ تغییر قابل توجهی در نسخه ها وجود ندارد.
7. هماهنگی رشته با str.join()
- نسخه های سازگار: Python 2.x و 3.x.
-
بهینه سازی در پایتون 3.9+:
- پیشرفت های داخلی در کنترل رشته (PEP 584).
رزومه
-
ساختار داده ها:
__slots__
باdefaultdict
بشر - کارآیی حافظه و پردازنده: ژنراتورها ، Numpy ، Cython.
-
بهینه سازی الگوریتمی:
lru_cache
باstr.join()
بشر