الدوال (Functions) في بايثون
الدرس السادس: الدوال (Functions) وكيفية استخدامها لتنظيم الكود وجعله أكثر قابلية لإعادة الاستخدام.
تعلم بايثون
February 4, 2025

الدرس السادس: الدوال (Functions) في بايثون
مرحبًا بك في الدرس السادس من سلسلة تعلم لغة بايثون! في هذا الدرس، سنركز على الدوال (Functions) وكيفية استخدامها لتنظيم الكود وجعله أكثر قابلية لإعادة الاستخدام. الدوال هي واحدة من أهم المفاهيم في البرمجة، حيث تُستخدم لتقسيم البرنامج إلى أجزاء صغيرة ومُدارة بسهولة.
1. ما هي الدوال؟
الدوال هي كتل من الكود تقوم بمهمة معينة ويمكن استدعاؤها عند الحاجة. باستخدام الدوال، يمكنك:
- تجنب تكرار الكود.
- تنظيم الكود بشكل أفضل.
- جعل البرنامج أكثر قابلية للقراءة والصيانة.
أ. تعريف دالة
تُعرف الدالة باستخدام الكلمة المفتاحية def
متبوعة باسم الدالة وأقواس تحتوي على المعاملات (إن وجدت).
def greet():
print("Hello, World!")
ب. استدعاء دالة
بعد تعريف الدالة، يمكنك استدعاؤها باستخدام اسمها متبوعًا بأقواس.
greet() # النتيجة: Hello, World!
2. الدوال مع المعاملات (Parameters)
المعاملات هي القيم التي تُمرر إلى الدالة عند استدعائها. يمكن أن تكون الدوال بدون معاملات أو تحتوي على واحد أو أكثر.
أ. دالة بمعامل واحد
def greet(name):
print(f"Hello, {name}!")
greet("Ali") # النتيجة: Hello, Ali!
ب. دالة بمعاملات متعددة
def add(a, b):
print(a + b)
add(5, 3) # النتيجة: 8
3. إرجاع القيم من الدوال
بدلاً من طباعة النتائج داخل الدالة، يمكنك إرجاع القيم باستخدام كلمة return
. هذه القيم يمكن تخزينها في متغيرات أو استخدامها مباشرة.
def multiply(a, b):
return a * b
result = multiply(4, 5)
print(result) # النتيجة: 20
ملاحظة: عندما يتم الوصول إلى كلمة return
، تتوقف الدالة عن التنفيذ ولا يتم تنفيذ أي كود بعدها.
4. القيم الافتراضية للمعاملات
يمكنك تحديد قيم افتراضية للمعاملات بحيث إذا لم يتم تمرير قيمة معينة عند استدعاء الدالة، يتم استخدام القيمة الافتراضية.
def greet(name="Guest"):
print(f"Hello, {name}!")
greet() # النتيجة: Hello, Guest!
greet("Ali") # النتيجة: Hello, Ali!
5. الدوال ذات عدد غير محدد من المعاملات
إذا كنت لا تعرف عدد المعاملات التي سيتم تمريرها إلى الدالة، يمكنك استخدام *args
لتمرير عدد غير محدد من المعاملات.
أ. استخدام *args
def sum_all(*args):
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3, 4)) # النتيجة: 10
ب. استخدام **kwargs
إذا كنت تريد تمرير عدد غير محدد من المعاملات على شكل أزواج مفتاح-قيمة، يمكنك استخدام **kwargs
.
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Ali", age=25, city="Riyadh")
# النتيجة:
# name: Ali
# age: 25
# city: Riyadh
6. الدوال المتداخلة (Nested Functions)
يمكنك تعريف دالة داخل دالة أخرى. هذه الدوال الداخلية يمكن أن تُستخدم فقط داخل الدالة الأم.
def outer_function():
print("This is the outer function.")
def inner_function():
print("This is the inner function.")
inner_function()
outer_function()
# النتيجة:
# This is the outer function.
# This is the inner function.
7. الدوال المجهولة (Lambda Functions)
الدوال المجهولة (أو lambda ) هي دوال صغيرة يمكن كتابتها في سطر واحد. تُستخدم عادةً عندما تحتاج إلى دالة بسيطة للاستخدام المؤقت.
أ. صياغة دالة Lambda
square = lambda x: x ** 2
print(square(5)) # النتيجة: 25
ب. استخدام Lambda مع الدوال الأخرى
يمكنك استخدام lambda
مع دوال مثل map()
وfilter()
.
# استخدام map() لتطبيق دالة على كل عنصر في القائمة
numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x ** 2, numbers))
print(squares) # النتيجة: [1, 4, 9, 16]
# استخدام filter() لتصفية العناصر بناءً على شرط
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # النتيجة: [2, 4]
8. نطاق المتغيرات (Scope)
نطاق المتغير يحدد مكان استخدامه داخل البرنامج. هناك نوعان رئيسيان من النطاقات:
- المتغيرات المحلية (Local): متغيرات معرفة داخل دالة ولا يمكن الوصول إليها خارجها.
- المتغيرات العامة (Global): متغيرات معرفة خارج الدوال ويمكن الوصول إليها من أي مكان.
أ. المتغيرات المحلية
def my_function():
x = 10 # متغير محلي
print(x)
my_function() # النتيجة: 10
# print(x) # خطأ: x غير معرفة هنا
ب. المتغيرات العامة
x = 10 # متغير عام
def my_function():
print(x)
my_function() # النتيجة: 10
print(x) # النتيجة: 10
ملاحظة: إذا أردت تعديل متغير عام داخل دالة، يجب استخدام كلمة global
.
x = 10
def modify_global():
global x
x = 20
modify_global()
print(x) # النتيجة: 20
9. تطبيقات عملية
تطبيق 1: حساب المتوسط الحسابي
def calculate_average(numbers):
if len(numbers) == 0:
return 0
return sum(numbers) / len(numbers)
nums = [10, 20, 30, 40, 50]
average = calculate_average(nums)
print(f"The average is: {average}") # النتيجة: The average is: 30.0
تطبيق 2: التحقق من الأعداد الأولية
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
print(is_prime(11)) # النتيجة: True
print(is_prime(15)) # النتيجة: False
تطبيق 3: استخدام Lambda مع filter()
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # النتيجة: [2, 4, 6]
10. نصائح حول استخدام الدوال
-
اجعل الدوال صغيرة ومحددة:
حاول أن تكون الدالة مسؤولة عن مهمة واحدة فقط. هذا يجعل الكود أكثر قابلية للقراءة والصيانة. -
استخدم أسماء واضحة:
اختر أسماء تصف وظيفة الدالة بوضوح. -
تجنب استخدام المتغيرات العامة إلا عند الضرورة:
حاول الحد من استخدام المتغيرات العامة لأنها قد تؤدي إلى مشاكل في الكود الكبير.
الخاتمة
في هذا الدرس، تعلمت كيفية إنشاء الدوال واستخدامها لتنظيم الكود وجعله أكثر قابلية لإعادة الاستخدام. الدوال هي أداة قوية تساعدك على تقسيم البرنامج إلى أجزاء صغيرة ومُدارة بسهولة.
في الدرس القادم، سنتحدث عن التعامل مع الأخطاء (Error Handling) وكيفية التعامل مع الاستثناءات في البرامج. استمر في الممارسة ولا تتردد في طرح الأسئلة إذا كنت بحاجة إلى مساعدة!
🚀 أنت الآن على الطريق الصحيح لتصبح مبرمجًا محترفًا!
التعليقات

لا يوجد اي تعليقات
يرجى تسجيل الدخول لترك تعليق