🚀 تحسين أداء Python: استخدام `@lru_cache` لتسريع الدوال! 🚀
هل تواجه بطئًا في دوالك التي تعتمد على المدخلات المتكررة؟ إليك طريقة سحرية لتسريعها باستخدام التخزين المؤقت!
المُزخرف `@lru_cache` من وحدة `functools` يقوم بتخزين نتائج استدعاءات الدالة. عندما يتم استدعاء الدالة بنفس المدخلات مرة أخرى، بدلاً من إعادة الحساب، يتم إرجاع النتيجة المخزنة مؤقتًا، مما يحسن الأداء بشكل كبير، خاصة للدوال العودية أو المكلفة.
['#Python', '#برمجة', '#تطوير', '#تسريع_الكود', '#مكتبات_Python', '#lru_cache', '#Optimization']
هل تواجه بطئًا في دوالك التي تعتمد على المدخلات المتكررة؟ إليك طريقة سحرية لتسريعها باستخدام التخزين المؤقت!
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(30))
print(fibonacci(30)) # هذه المرة ستكون أسرع بكثير!
المُزخرف `@lru_cache` من وحدة `functools` يقوم بتخزين نتائج استدعاءات الدالة. عندما يتم استدعاء الدالة بنفس المدخلات مرة أخرى، بدلاً من إعادة الحساب، يتم إرجاع النتيجة المخزنة مؤقتًا، مما يحسن الأداء بشكل كبير، خاصة للدوال العودية أو المكلفة.
['#Python', '#برمجة', '#تطوير', '#تسريع_الكود', '#مكتبات_Python', '#lru_cache', '#Optimization']
🚀 تحسين أداء Python: استخدام `collections.deque` 🚀
هل تعاني من بطء عمليات الإضافة والحذف من بداية القوائم في Python؟ اكتشف كيف يمكن لـ `collections.deque` تسريع هذه العمليات بشكل كبير!
تُعد `collections.deque` (اختصار لـ double-ended queue) بنية بيانات مُحسّنة لعمليات الإضافة والحذف السريعة من كلا الطرفين (البداية والنهاية). على عكس القوائم القياسية في Python، حيث تكون عمليات `insert(0, ...)` و `pop(0)` بطيئة (تعقيد زمني O(n)) لأنها تتطلب إعادة ترتيب جميع العناصر، فإن عمليات `appendleft()` و `popleft()` في `deque` لها تعقيد زمني ثابت O(1). هذا يجعلها الخيار الأمثل عند التعامل مع طوابير الانتظار، أو سجلات الأحداث، أو أي سيناريو يتطلب تعديلات متكررة على أطراف مجموعة بيانات.
['#Python', '#Programming', '#DataStructures', '#Optimization', '#CodingTips', '#LearnToCode', '#PythonTips']
هل تعاني من بطء عمليات الإضافة والحذف من بداية القوائم في Python؟ اكتشف كيف يمكن لـ `collections.deque` تسريع هذه العمليات بشكل كبير!
from collections import deque
# إنشاء deque
my_deque = deque(['a', 'b', 'c'])
# إضافة عنصر إلى البداية (أسرع بكثير من list.insert(0, ...))
my_deque.appendleft('x')
print(my_deque) # deque(['x', 'a', 'b', 'c'])
# إضافة عنصر إلى النهاية
my_deque.append('y')
print(my_deque) # deque(['x', 'a', 'b', 'c', 'y'])
# حذف عنصر من البداية (أسرع بكثير من list.pop(0))
first_item = my_deque.popleft()
print(first_item) # x
print(my_deque) # deque(['a', 'b', 'c', 'y'])
# حذف عنصر من النهاية
last_item = my_deque.pop()
print(last_item) # y
print(my_deque) # deque(['a', 'b', 'c'])
# يمكنك أيضاً تحديد حجم أقصى للـ deque
limited_deque = deque(['a', 'b', 'c'], maxlen=3)
limited_deque.append('d')
print(limited_deque) # deque(['b', 'c', 'd']) # أقدم عنصر تم حذفه تلقائياً
تُعد `collections.deque` (اختصار لـ double-ended queue) بنية بيانات مُحسّنة لعمليات الإضافة والحذف السريعة من كلا الطرفين (البداية والنهاية). على عكس القوائم القياسية في Python، حيث تكون عمليات `insert(0, ...)` و `pop(0)` بطيئة (تعقيد زمني O(n)) لأنها تتطلب إعادة ترتيب جميع العناصر، فإن عمليات `appendleft()` و `popleft()` في `deque` لها تعقيد زمني ثابت O(1). هذا يجعلها الخيار الأمثل عند التعامل مع طوابير الانتظار، أو سجلات الأحداث، أو أي سيناريو يتطلب تعديلات متكررة على أطراف مجموعة بيانات.
['#Python', '#Programming', '#DataStructures', '#Optimization', '#CodingTips', '#LearnToCode', '#PythonTips']
✨ تحسين أداء Python: استخدام `__slots__`
هل تعلم أن استخدام `__slots__` في كلاسات Python يمكن أن يوفر الذاكرة ويسرع الوصول إلى السمات؟ دعنا نرى كيف!
عندما تستخدم `__slots__`، فإنك تخبر Python بعدم إنشاء `__dict__` لكل كائن. هذا يقلل من استهلاك الذاكرة ويسرع عملية الوصول إلى السمات لأن Python لا يحتاج إلى البحث في قاموس ديناميكي.
['#Python', '#برمجة', '#تطوير', '#نصائح', '#Optimization']
هل تعلم أن استخدام `__slots__` في كلاسات Python يمكن أن يوفر الذاكرة ويسرع الوصول إلى السمات؟ دعنا نرى كيف!
class Point:
__slots__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
# بدون __slots__:
# class PointNoSlots:
# def __init__(self, x, y):
# self.x = x
# self.y = y
p1 = Point(1, 2)
print(p1.x)
عندما تستخدم `__slots__`، فإنك تخبر Python بعدم إنشاء `__dict__` لكل كائن. هذا يقلل من استهلاك الذاكرة ويسرع عملية الوصول إلى السمات لأن Python لا يحتاج إلى البحث في قاموس ديناميكي.
['#Python', '#برمجة', '#تطوير', '#نصائح', '#Optimization']
💡 تحسين سرعة الدوال في بايثون باستخدام @lru_cache ✨
هل تعاني من بطء بعض الدوال في بايثون؟ تعرف على طريقة سحرية لتسريعها باستخدام التخزين المؤقت للنتائج!
المُزخرف `@lru_cache` يقوم بتخزين نتائج استدعاءات الدالة. إذا تم استدعاء الدالة بنفس المعاملات مرة أخرى، يتم إرجاع النتيجة المخزنة بدلاً من إعادة حسابها، مما يسرع الأداء بشكل كبير، خاصة للدوال العودية أو التي تستغرق وقتاً طويلاً.
['#بايثون', '#برمجة', '#تطوير', '#Python', '#Coding', '#Optimization', '#lru_cache']
هل تعاني من بطء بعض الدوال في بايثون؟ تعرف على طريقة سحرية لتسريعها باستخدام التخزين المؤقت للنتائج!
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(30))
print(fibonacci(35))
المُزخرف `@lru_cache` يقوم بتخزين نتائج استدعاءات الدالة. إذا تم استدعاء الدالة بنفس المعاملات مرة أخرى، يتم إرجاع النتيجة المخزنة بدلاً من إعادة حسابها، مما يسرع الأداء بشكل كبير، خاصة للدوال العودية أو التي تستغرق وقتاً طويلاً.
['#بايثون', '#برمجة', '#تطوير', '#Python', '#Coding', '#Optimization', '#lru_cache']