برنامه نویسی

با این ترفندها کد 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()بشر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا