الدوال في بايثون
توضح هذه المقالة الدوال في بايثون۔
YouTube Video
الدوال في بايثون
الدوال في بايثون هي ميزة أساسية لتعريف كتل رمز قابلة لإعادة الاستخدام، مما يتيح لك تنظيم وتبسيط برنامجك من خلال استدعائها عند الحاجة.۔ استخدام الدوال يمكن أن يحسن من قابلية قراءة الكود ويلتزم بمبدأ DRY (لا تكرر نفسك، تجنب كتابة نفس الكود عدة مرات).۔
تعريف الدوال
يتم تعريف الدوال باستخدام الكلمة المفتاحية def
۔ الصيغة الأساسية كما يلي:۔
1def function_name(arg1, arg2, ..., argN):
2 """docstring (A brief description of the function)"""
3 processing
4 return return_value
على سبيل المثال، لتعريف دالة تجمع بين رقمين، يمكنك كتابة التالي:۔
1def add(x, y):
2 """A function that adds two numbers and returns the result"""
3 return x + y
استدعاء الدوال
يمكن استدعاء واستخدام الدالة المعرفة كما يلي:۔
1result = add(3, 4)
2print(result) # Output: 7
مكونات الدالة
-
اسم الدالة: اسم الدالة الذي يستخدم لاستدعائها۔
-
الوسائط (المعلمات): أسماء المتغيرات التي تستقبل البيانات المرسلة أثناء الاستدعاء۔ يمكنك تعريف صفر أو أكثر من الوسائط۔
-
سلسلة التوثيق (Docstring): سلسلة تُستخدم لوصف الغرض من وظيفة ما وكيفية استخدامها۔ اختياري۔
-
جسم الدالة: كتلة متداخلة حيث يتم كتابة التعليمات التي تنفذها الدالة۔
-
القيمة الناتجة (Return Value): القيمة التي تُعاد إلى المستدعي باستخدام عبارة
return
۔ إذا تم حذف عبارةreturn
، فسيتم إرجاع القيمة الافتراضيةNone
۔
أنواع الوسائط (المعلمات)
في بايثون، هناك عدة أنواع من الوسائط۔
- الوسائط الموضعية: الطريقة القياسية لتمرير الوسائط إلى الدوال۔
- الوسائط الافتراضية: الوسائط التي تحتوي على قيم افتراضية ويمكن تخطيها أثناء الاستدعاء۔
1def greet(name, message="Hello"):
2 print(f"{message}, {name}")
3
4greet("Alice") # "Hello, Alice"
5greet("Bob", "Good morning") # "Good morning, Bob"
- وسيطات ذات طول متغير:
*args
لاستقبال العديد من الوسيطات الموضعية كصفيف، و**kwargs
لاستقبالها كقاموس۔
1def func(*args, **kwargs):
2 print("args:", args)
3 print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}
من خلال استخدام الدوال بشكل صحيح، يمكنك كتابة برامج Python بشكل أكثر فعالية وكفاءة۔
الدوال المجهولة (Lambda) في Python
في Python، تُستخدم دوال lambda
لتعريف دوال مجهولة وصغيرة۔ على عكس الدوال المُعرفة باستخدام الكلمة المفتاحية def
، تتيح لك lambda
إنشاء دوال قصيرة في سطر واحد۔ هنا، سنشرح بالتفصيل دوال lambda
في Python۔
أساسيات دوال lambda
تُستخدم دوال lambda
، التي تُعرف أيضًا بالدوال المجهولة، لتعريف دوال مؤقتة بدون اسم، كما يوحي الاسم۔ الصيغة الأساسية كما يلي:۔
1lambda arguments: expression
arguments
: تُحدد وسيطات الدالة۔ يمكن تحديد عدة وسيطات، مفصولة بفواصل۔expression
: هو تعبير يتم تقييمه بناءً على الوسيطات۔ نتيجة التعبير تصبح القيمة المرجعة للدالة۔
على سبيل المثال، الكود التالي يعرّف وينفذ دالة lambda
تجمع بين رقمين۔
1add = lambda x, y: x + y
2print(add(5, 3)) # Output: 8
في هذا المثال، lambda x, y: x + y
هي وظيفة lambda
تأخذ وسيطين، x
و y
، وتعيد مجموعهما۔
حالات استخدام دوال lambda
تعتبر دوال lambda
مفيدة في الحالات التي تحتاج فيها إلى تعريف دالة بسيطة مباشرةً۔ تُستخدم بشكل خاص في الحالات التالية:۔
-
عند تمريرها كوسيطات للدوال
- إنه مفيد في الدوال عالية المستوى (الدوال التي تأخذ دوال أخرى كوسائط) عند تمرير دوال قصيرة ومؤقتة۔
-
عند تحديد المفاتيح لفرز القوائم
- تكون مفيدة لتحديد معايير الفرز (المفاتيح) في الدوال مثل
sort()
أوsorted()
۔
- تكون مفيدة لتحديد معايير الفرز (المفاتيح) في الدوال مثل
استخدام مثال في الدوال العليا
أمثلة نموذجية على الدوال العليا تشمل map()
و filter()
و reduce()
۔ تأخذ هذه الدوال دوال أخرى كوسيطات وتطبقها على تسلسلات مثل القوائم۔
1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared) # Output: [1, 4, 9, 16, 25]
في هذا المثال، يتم تمرير دالة lambda
إلى دالة map()
لتربيع كل رقم في قائمة۔
أمثلة على استخدام ترتيب القوائم
يمكن أحيانًا استخدام وظيفة lambda
لتحديد مفتاح مخصص عند ترتيب قائمة۔ على سبيل المثال، الشيفرة التالية ترتب قائمة من الأزواج بناءً على العنصر الثاني۔
1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
في هذا المثال، تُستخدم وظيفة lambda
لترتيب الأزواج بناءً على العنصر الثاني (وهو سلسلة نصية)۔
filter()
و lambda
تُستخدم وظيفة filter()
لتصفية العناصر في قائمة (أو أي كائن قابل للتكرار) بناءً على شرط معين۔
1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers) # Output: [2, 4, 6, 8]
في هذا المثال، يتم تصفية الأرقام الزوجية في قائمة لإنشاء قائمة جديدة۔
lambda
و reduce()
تُستخدم وظيفة reduce()
لتقليص قائمة إلى قيمة واحدة۔ يمكن تنفيذها بسهولة باستخدام وظيفة lambda
۔
1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product) # Output: 120
في هذا المثال، يتم ضرب جميع العناصر في القائمة معًا للحصول على نتيجة۔
تجنب استخدام وظائف lambda
المعقدة
تتميز وظائف lambda
بإيجازها، ولكن يصبح من الصعب قراءتها عند استخدامها لتنفيذ منطق معقد۔ لذلك، من المناسب استخدامها للعمليات البسيطة التي يمكن التعبير عنها في سطر واحد۔ للعمليات المعقدة، يكون تعريف وظيفة باستخدام def
أكثر قابلية للقراءة والصيانة۔
على سبيل المثال، يجب عليك تجنب استخدام وظائف lambda
المعقدة مثل المثال أدناه۔
1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)
في هذه الحالة، من الأفضل استخدام وظيفة معرفة بـ def
، كما هو موضح أدناه۔
1def complex_func(x, y):
2 if x > y:
3 return x * 2 + y
4 else:
5 return x + y * 2
الخاتمة
وظائف lambda
في بايثون هي أداة مريحة لتعريف الوظائف المؤقتة القصيرة۔ غالبًا ما تُستخدم في الوظائف عالية الترتيب أو عمليات القوائم لتعريف شروط محددة بإيجاز۔ ومع ذلك، يجب أن تقتصر وظائف lambda
على المهام البسيطة، بينما يُفضل استخدام وظائف def
للمنطق المعقد۔
يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔