الدرس 35 من 56 · مهارات إضافية لكل شيء

دوال بمستوى برو: قيم افتراضية وأسرار إضافية

سويت دوالك الخاصة من قبل — اليوم نرفعها مستوى احترافي بثلاث حيل تجعلها مرنة وذكية.

الحيلة 1: القيم الافتراضية. تخيل مطعم يبيع شاي: أكثر الزبائن يطلبونه "عادي" بدون ما يقولون. فالنادل يفترض عادي إلا إذا طلبت شي ثاني. الدالة نفسها:

def greet(name, greeting="أهلاً"):
    return f"{greeting} {name}!"

print(greet("فليكس"))              # أهلاً فليكس!
print(greet("سالم", "صباح الخير"))  # صباح الخير سالم!

القيمة الافتراضية greeting="أهلاً" تشتغل إذا ما أحد مررها — والنداء الثاني تجاوزها بقيمة جديدة. القيم الافتراضية = ميزات اختيارية، ما ترغم أحد يدخل شي ما يبيه.

الحيلة 2: إرجاع أكثر من قيمة. الدالة العادية ترجع شيئاً واحداً — لكن بايثون تقدر ترجع حزمة كاملة، وتفكها متغيرات:

def min_max(nums):
    return min(nums), max(nums)

lo, hi = min_max([3, 9, 1, 7])
print("الأصغر:", lo)   # 1
print("الأكبر:", hi)   # 9

رجعنا قيمتين بفاصلة، واستقبلناهم بمتغيرين بفاصلة — انفكت الحزمة! تنفع لأي شي: أصغر وأكبر، اسم ودرجة، سعر وكمية.

الحيلة 3: عدد معاملات مفتوح (*args). أحياناً ما تعرف كم رقم بيعطيك المستخدم. النجمة تسوي حقيبة تجمع كل شي يعطى:

def add_all(*nums):
    total = 0
    for n in nums:
        total += n
    return total

print(add_all(1, 2))           # 3
print(add_all(1, 2, 3, 4, 5))   # 15

النجمة قبل الاسم تقول: "كل اللي يجي، اجمعه بقائمة اسمها nums". نداء واحد أو عشرة أرقام — الدالة شغالة!

جرب بنفسك: سوّ دالة summarize تأخذ أي عدد من الدرجات وترجع المعدل والأعلى والأصغر مرة وحدة — ثلاث حيل ببرنامج واحد.

اختبار سريع للدرس

جاوب على كل الأسئلة — لازم كلها صح. إذا غلطت بيطلع صندوق ذهبي يفهّمك وش الخطأ. مو عيب تغلط، كل مبرمج بالعالم غلط وأخذ منها درس.

1. لو كتبنا def f(x, y=2) وناديناها f(5) — كم تصير y؟
2. كيف نستقبل قيمتين ترجعهما الدالة؟
3. وش تسوي النجمة بـ def add_all(*nums)؟
الدرس 34 الدرس 36 — المشروع الختامي الكبير: خزنة المهام المحمية
FeLiXFeLiX AI — مساعد المنصتين