ما هي الدوال الكسولة (Lazy Functions) ولماذا نستخدمها؟

🗓 الاثنين - 5 مايو 2025، 12:51 مساءً | ⏱ 3 دقيقة | 👁 100 مشاهدة
ما هي الدوال الكسولة في بايثون؟ ولماذا تُستخدم؟ مقدمة هل فكرت يومًا أن تجعل برنامجك أسرع أو يستهلك ذاكرة أقل؟ هل سمعت عن فكرة أن الدالة لا تنفذ كل شيء فورًا بل تنتظر حتى تطلب منها؟ هذا هو بالضبط ما يُعرف في بايثون باسم الدوال الكسولة أو Lazy Functions. في هذا المقال، سنتعرف على معناها، فائدتها، وأشهر الأمثلة عليها بلغة بسيطة. ما معنى دالة "كسولة"؟ الدالة الكسولة في بايثون لا تُعيد النتائج كاملة دفعة واحدة، بل تُنتج القيم واحدة تلو الأخرى فقط عند الحاجة. هذا المفهوم يُعرف باسم التنفيذ المؤجل (Lazy Evaluation). لماذا نستخدمها؟ توفر الذاكرة، لأنها لا تخزن كل العناصر في وقت واحد. تجعل البرنامج أسرع خاصة مع البيانات الكبيرة. تُسهل التعامل مع بيانات لا نهائية أو ضخمة. أمثلة على الدوال الكسولة في بايثون ١. استخدام range() هذه الدالة لا تُخزن الأرقام، بل تُولدها عند الطلب: for i in range(5): print(i) ٢. استخدام map() لن يتم تنفيذ الدالة على العناصر إلا عند استدعائها: def double(x): return x * 2 result = map(double, [1, 2, 3]) print(list(result)) # [2, 4, 6] ٣. دالة تستخدم yield هكذا يتم إنشاء Generator يُنتج القيم واحدة تلو الأخرى: def countdown(n): while n > 0: yield n n -= 1 ويُستخدم كالتالي: c = countdown(3) print(next(c)) # 3 print(next(c)) # 2 كيف نُرغم الدالة الكسولة على التنفيذ؟ list(): لتحويل الناتج إلى قائمة. for loop: التكرار يستهلك النتائج. next(): لاستدعاء القيمة التالية يدويًا. tuple(), sum(), max(): كلها تجبر التنفيذ الكامل. مكتبات بايثون التي تدعم التنفيذ الكسول itertools: مكتبة قياسية لإنشاء تكرارات كسولة متقدمة. more-itertools: توسعات قوية للمكتبة السابقة. functools: تحتوي على أدوات مؤجلة مثل lru_cache. ماذا عن doit()؟ هذه ليست من بايثون، بل من مكتبة SymPy الخاصة بالرياضيات الرمزية. وتُستخدم لتنفيذ العمليات الرياضية المؤجلة. from sympy import Symbol, Sum, sin x = Symbol('x') s = Sum(sin(x), (x, 1, 3)) print(s.doit()) # sin(1) + sin(2) + sin(3) هل الدوال الكسولة مناسبة دائمًا؟ لا إذا كنت تحتاج كل البيانات دفعة واحدة. قد تُصعّب تتبع الأخطاء أثناء التنفيذ. ليست ضرورية في البرامج الصغيرة أو البسيطة. خاتمة الدوال الكسولة أداة قوية في بايثون، خصوصًا عندما يكون التطبيق يتعامل مع بيانات ضخمة أو غير معروفة الحجم. هي طريقة ذكية تجعل كودك أخف، أسرع، وأكثر مرونة. فهمك لهذا المفهوم خطوة مهمة لتصبح مبرمج بايثون محترف.
#Python #الدوال الكسولة #Lazy Evaluation #Generators #Iterators #yield #مكتبة itertools #كفاءة الذاكرة #البرمجة المتقدمة #SymPy doit