الحاسب الآلي · الصف الثالث الإعدادي · الترم الأول
الدوال ذات المعاملات في لغة Python
تعريف الدالة في Python باستخدام def، والمعاملات والوسائط، وإرجاع القيم بـ return، والقيم الافتراضية للمعاملات، ونطاق المتغيرات، مع أمثلة لدوال تعيد استخدام الكود.
آخر تحديث: · كيف نراجع المحتوى
مقدمة
- الوحدة: الوحدة الأولى: الذكاء الاصطناعي ولغات البرمجة
- الدرس: الرابع
إذا احتجت إلى حساب مساحة مستطيل عشر مرات في برنامج واحد، فهل تكتب المعادلة عشر مرات؟ الأفضل أن تكتبها مرة واحدة داخل دالة، ثم تستدعيها كلما احتجت، مع إعطائها أبعادًا مختلفة في كل مرة. هذه الأبعاد هي المعاملات.
أهداف التعلم
- أن تعرّف دالة في Python وتستدعيها.
- أن تميز بين المعامل (Parameter) والوسيط (Argument).
- أن تعيد قيمة من الدالة باستخدام
return. - أن تستخدم القيم الافتراضية للمعاملات.
- أن تفرق بين المتغير المحلي والمتغير العام.
شرح الدرس
لماذا الدوال؟
- إعادة الاستخدام: نكتب الكود مرة ونستخدمه مرات.
- التنظيم: نقسم البرنامج الكبير إلى أجزاء صغيرة مفهومة (تطبيق لمهارة التحليل في التفكير الحاسوبي).
- سهولة التعديل: إصلاح الخطأ في مكان واحد يصلحه في كل الاستدعاءات.
وقد استخدمت بالفعل دوالًا جاهزة مثل print() وlen() وinput().
تعريف دالة واستدعاؤها
def greet():
print("Welcome to Python!")
greet() # الاستدعاء
defكلمة محجوزة لتعريف الدالة، يليها اسمها وقوسان ونقطتان.- جسم الدالة يُكتب بإزاحة (مسافة بادئة) ثابتة.
- الدالة لا تنفذ إلا عند استدعائها.
المعاملات والوسائط
def greet(name): # name معامل
print("Hello, " + name)
greet("Omar") # "Omar" وسيط
greet("Salma")
- المعامل: المتغير المكتوب في تعريف الدالة.
- الوسيط: القيمة الفعلية التي نمررها عند الاستدعاء.
ويمكن أن تأخذ الدالة أكثر من معامل، وتُمرر الوسائط بالترتيب نفسه:
def rectangle_area(length, width):
print(length * width)
rectangle_area(5, 3) # 15
إرجاع قيمة بـ return
return تعيد نتيجة إلى المكان الذي استُدعيت منه الدالة، فيمكن تخزينها أو استخدامها في عملية أخرى، وتنهي تنفيذ الدالة فورًا:
def rectangle_area(length, width):
return length * width
a1 = rectangle_area(5, 3)
a2 = rectangle_area(2, 4)
print(a1 + a2) # 23
الفرق: print تعرض القيمة على الشاشة فقط، أما return فتعيدها للبرنامج.
القيم الافتراضية للمعاملات
def power(base, exponent=2):
return base ** exponent
print(power(5)) # 25 (استُخدمت القيمة الافتراضية 2)
print(power(2, 3)) # 8
المعاملات ذات القيم الافتراضية تُكتب بعد المعاملات التي بلا قيم افتراضية.
نطاق المتغيرات
المتغير الذي يُنشأ داخل الدالة محلي، لا يُعرف خارجها:
def calc():
result = 10
return result
calc()
print(result) # خطأ NameError: المتغير محلي داخل الدالة
أما المتغير المعرف خارج كل الدوال فهو عام يمكن قراءته داخلها.
أمثلة وتطبيقات
مثال: دالة تعيد تقدير الطالب حسب درجته:
def get_grade(score):
if score >= 85:
return "Excellent"
elif score >= 65:
return "Good"
elif score >= 50:
return "Pass"
else:
return "Fail"
for s in [92, 70, 45]:
print(s, get_grade(s))
المخرجات: 92 Excellent ثم 70 Good ثم 45 Fail.
مثال: دالة تستقبل قائمة وتعيد متوسطها:
def average(numbers):
return sum(numbers) / len(numbers)
print(average([10, 20, 30])) # 20.0
ملاحظات مهمة
- عدد الوسائط يجب أن يطابق عدد المعاملات التي بلا قيم افتراضية، وإلا ظهر الخطأ
TypeError. - الدالة التي لا تحتوي
returnتعيد القيمةNone. - اختر أسماء واضحة للدوال تصف ما تفعله، مثل
calculate_total.
تطبيق إضافي:
def rectangle_area(length, width):
return length * width
area = rectangle_area(6, 4)
print(area) # 24
المعاملان length وwidth يظهران في تعريف الدالة، أما العددان 6 و4 فهما وسيطان أُرسلا عند الاستدعاء. أعادت الدالة القيمة 24 فخُزنت في المتغير area.
خطأ شائع: طباعة الناتج داخل الدالة بدل إرجاعه دائمًا. تستخدم return عندما نحتاج القيمة في حساب آخر؛ أما print فتعرضها فقط ولا تجعلها ناتج الدالة.
المفاهيم الأساسية
def name(parameters):لتعريف الدالة، وتُنفذ عند الاستدعاء فقط.- المعامل في التعريف، والوسيط في الاستدعاء.
returnتعيد قيمة وتنهي الدالة.- القيم الافتراضية تجعل بعض المعاملات اختيارية.
- المتغيرات داخل الدالة محلية.
ملخص الدرس
الدالة كتلة كود مسماة نعرفها بـ def ونستدعيها باسمها، وتجعل البرنامج منظمًا وقابلًا لإعادة الاستخدام. نمرر إليها البيانات عبر المعاملات، ونستقبل نتيجتها بـ return، ويمكن إعطاء بعض المعاملات قيمًا افتراضية. والمتغيرات المنشأة داخل الدالة لا تُعرف خارجها.
أسئلة للتدريب
- اكتب دالة
square(n)تعيد مربع العدد. - ما الفرق بين المعامل والوسيط؟ وضح بمثال.
- اكتب دالة
is_even(n)تعيدTrueإذا كان العدد زوجيًا وFalseإذا كان فرديًا. - ما ناتج
power(3)إذا عُرفت الدالة بالصورةdef power(b, e=3): return b ** e؟ - اكتب دالة تستقبل اسمًا وعمرًا وتعيد جملة تعريفية بهما.