Kodax

الدوال Functions — أساسيات Python

الدوال (Functions)

عندما تكرر نفس الأوامر في أكثر من مكان، الأفضل أن تضعها في دالة: كتلة كود لها اسم، تكتبها مرة وتستدعيها متى شئت. الدوال تجعل البرنامج أقصر، وأسهل في الفهم والتعديل (عدّل في مكان واحد بدل عشرة).

التعريف والاستدعاء

def greet():
    print("مرحباً!")

greet()   # الاستدعاء: هنا يُنفَّذ الكود
greet()

تعريف الدالة وحده لا ينفذها؛ التنفيذ يحدث عند الاستدعاء greet().

المعاملات (parameters)

def greet(name):
    print("مرحباً", name)

greet("منى")    # "منى" هي الوسيط (argument)

return: الدالة التي ترجع قيمة

def area(width, height):
    return width * height

result = area(4, 5)       # 20
print(area(2, 3) + 1)     # 7

- return ترجع القيمة وتُنهي الدالة فوراً.

- الدالة التي لا تحتوي return ترجع None.

print أم return؟ (فرق أساسي)

def add_print(a, b):
    print(a + b)      # يعرض فقط

def add_return(a, b):
    return a + b      # يرجع القيمة لمن استدعى

x = add_print(2, 3)   # يطبع 5 لكن x تساوي None
y = add_return(2, 3)  # y تساوي 5 ويمكن استخدامها

القاعدة: الدالة التي تحسب شيئاً يجب أن ترجعه بـ return، واترك الطباعة لمن يستدعيها.

القيم الافتراضية والوسائط بالاسم

def power(base, exp=2):
    return base ** exp

power(3)            # 9
power(2, exp=5)     # 32

إرجاع أكثر من قيمة

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

low, high = min_max([4, 9, 1])

توثيق الدالة

اكتب سطراً بين علامات تنصيص ثلاثية أول الدالة يشرح ما تفعله (docstring).

تمرين

اكتب دالة is_even(n) ترجع True أو False، ودالة average(numbers) ترجع متوسط قائمة، واستخدمهما.

def greet(name):
    """تطبع رسالة ترحيب"""
    print(f"مرحباً {name}!")

greet("أحمد")

def area(width, height):
    """ترجع مساحة مستطيل"""
    return width * height

print(area(4, 5))          # 20

# print مقابل return
def add_print(a, b):
    print(a + b)

def add_return(a, b):
    return a + b

x = add_print(2, 3)        # يطبع 5
y = add_return(2, 3)
print(x, y)                # None 5

# قيمة افتراضية ووسيط بالاسم
def power(base, exp=2):
    return base ** exp

print(power(3), power(2, exp=5))   # 9 32

# إرجاع أكثر من قيمة
def min_max(numbers):
    return min(numbers), max(numbers)

low, high = min_max([4, 9, 1, 7])
print(low, high)           # 1 9

# دوال تستخدم دوال أخرى
def is_even(n):
    return n % 2 == 0

def count_evens(numbers):
    count = 0
    for n in numbers:
        if is_even(n):
            count += 1
    return count

print(count_evens([1, 2, 3, 4, 6]))   # 3
اختبر فهمك