إتقان البرمجة الوظيفية في بايثون: Map و Filter و Reduce
Mastering Functional Programming in Python: Map, Filter, and Reduce
البرومبت
Act as a senior Python developer with 10+ years of experience in functional programming. Teach me how to effectively use the `map`, `filter`, and `reduce` functions in Python with practical examples. Cover the following:
1. **Map**: Explain how to apply a function to every item in an iterable [LIST/ARRAY] and return a new iterable. Provide an example like squaring numbers in a list.
2. **Filter**: Demonstrate how to selectively include items from an iterable [LIST/ARRAY] based on a condition. Use an example like filtering even numbers.
3. **Reduce**: Show how to cumulatively apply a function to reduce an iterable [LIST/ARRAY] to a single value, such as summing all elements.
Include best practices, common pitfalls, and performance considerations for each function.
أسئلة شائعة
ما هي البرمجة الوظيفية في بايثون؟▼
البرمجة الوظيفية هي نمط برمجة يعتمد على استخدام الدوال النقية وتجنب تغيير الحالة أو البيانات. في بايثون، يمكن تطبيقها باستخدام دوال مثل `map` و `filter` و `reduce`.
كيف يعمل دالة `map` في بايثون؟▼
دالة `map` تطبق دالة محددة على جميع عناصر متكرر (مثل قائمة) وتعيد كائن `map` يحتوي على النتائج. مثال: `map(lambda x: x * 2, [1, 2, 3])` يعيد `[2, 4, 6]`.
ما الفرق بين `filter` و `map`؟▼
`map` تطبق دالة على كل عنصر وتعيد النتائج، بينما `filter` تعيد فقط العناصر التي تحقق شرطًا معينًا. مثال: `filter(lambda x: x > 2, [1, 2, 3, 4])` يعيد `[3, 4]`.
كيف تستخدم دالة `reduce` في بايثون؟▼
`reduce` تطبق دالة على عناصر متكرر وتجمعها إلى قيمة واحدة. يجب استيرادها من `functools`. مثال: `reduce(lambda x, y: x + y, [1, 2, 3])` يعيد `6`.
ما هي مزايا استخدام البرمجة الوظيفية في بايثون؟▼
تساهم في كتابة كود أوضح وأسهل للاختبار والصيانة، تقليل الأخطاء الجانبية، وتحسين الكفاءة عند التعامل مع البيانات الكبيرة.
هل يمكن استخدام `map` و `filter` مع دوال عادية بدلاً من لامبدا؟▼
نعم، يمكن استخدام أي دالة مع `map` و `filter` سواء كانت لامبدا أو دالة عادية. مثال: `def square(x): return x * 2` ثم `map(square, [1, 2, 3])`.