جاري تحميل المحتوى...
في الفصول السابقة تعلمت كتابة المتغيرات والشروط والحلقات والتعامل مع النصوص وCollections المختلفة. عندما يكبر البرنامج، قد تحتاج إلى تنفيذ التعليمات نفسها أكثر من مرة. هنا تأتي أهمية Functions، فهي تساعدك على وضع مجموعة من التعليمات تحت اسم واضح ثم استدعائها عند الحاجة بدل تكرار الكود.
بدل كتابة التعليمة نفسها عدة مرات، يمكن وضعها داخل Function وإعادة استخدامها.
def greet():
print("مرحبًا")
greet()
greet()
في هذا المثال:
def تبدأ تعريف Function.greet هو اسم الدالة.greet() يستدعي الدالة.يتم تنفيذ جسم الدالة في كل مرة نستدعي فيها greet()، ولذلك تظهر الرسالة مرتين.
defالصيغة الأساسية لتعريف Function بسيطة:
def greet():
print("مرحبًا")
يتكون التعريف هنا من:
def.greet.().يفضل أن يكون اسم Function واضحًا، وألا يبدأ برقم أو يحتوي على مسافات، وهي قواعد قريبة من قواعد أسماء المتغيرات التي سبق تعلمها.
تعريف Function لا يعني تنفيذ جسمها فورًا. التنفيذ يحدث عندما نستدعيها.
def greet():
print("مرحبًا")
greet()
يؤدي greet() إلى تنفيذ السطر الموجود داخل Function.
هناك فرق مهم بين المرحلتين:
def show_message():
print("Python")
show_message()
show_message()
تم تعريف Function مرة واحدة، لكن تم استدعاؤها مرتين.
يمكن جعل Function تستقبل قيمة عند استدعائها.
def greet(name):
print(f"مرحبًا {name}")
greet("Ali")
في هذا المثال:
name في تعريف Function هو Parameter."Ali" في greet("Ali") هي Argument.يمكن التفكير في Parameter بوصفه اسمًا تستقبل من خلاله Function قيمة، بينما Argument هي القيمة الفعلية التي نرسلها عند الاستدعاء.
يمكن أن تستقبل Function أكثر من Parameter.
def add(a, b):
print(a + b)
add(2, 3)
ترتبط القيمة 2 بـa والقيمة 3 بـb في هذا الاستدعاء، وتكون النتيجة المعروضة 5.
returnتستخدم return لإرسال قيمة من Function إلى المكان الذي استدعاها.
def add(a, b):
return a + b
result = add(2, 3)
print(result)
تعيد Function القيمة 5، ثم تخزن هذه القيمة في المتغير result.
return مقابل print()من المهم التمييز بينهما:
print() تعرض قيمة على الشاشة.return تعيد قيمة من Function إلى الكود الذي استدعاها.Function التالية تعرض الناتج:
def show_sum(a, b):
print(a + b)
show_sum(2, 3)
أما Function التالية فتعيد الناتج:
def get_sum(a, b):
return a + b
result = get_sum(2, 3)
print(result)
عندما تعيد Function قيمة باستخدام return يمكن تخزين تلك القيمة واستخدامها لاحقًا.
يمكن استخدام القيمة التي تعيدها Function داخل عمليات أخرى.
def add(a, b):
return a + b
result = add(2, 3)
print(result * 2)
تعيد add(2, 3) القيمة 5، ثم تضرب القيمة المخزنة في result في 2، فيظهر 10.
يمكن أيضًا استخدام الاستدعاء داخل تعبير بسيط:
def add(a, b):
return a + b
total = add(2, 3) + 5
print(total)
تكون قيمة total هي 10.
يمكن إعطاء Parameter قيمة افتراضية تستخدم عندما لا نرسل Argument له.
def greet(name="زائر"):
print(f"مرحبًا {name}")
greet()
greet("Ali")
في الاستدعاء الأول لا توجد Argument، لذلك تستخدم القيمة الافتراضية "زائر". في الاستدعاء الثاني تستخدم القيمة المرسلة "Ali".
في الاستدعاء العادي ترتبط Arguments بالـParameters حسب ترتيبها.
def introduce(name, age):
print(name, age)
introduce("Ali", 20)
القيمة الأولى "Ali" ترتبط بـname، والقيمة الثانية 20 ترتبط بـage.
يمكن ربط Argument مباشرة باسم Parameter.
def introduce(name, age):
print(name, age)
introduce(age=20, name="Ali")
هنا تحدد أسماء Parameters العلاقة بوضوح، ولذلك ترتبط 20 بـage و"Ali" بـname رغم اختلاف ترتيب الكتابة.
المتغير الذي ينشأ داخل Function يكون محليًا في هذا المثال.
def show():
message = "Hello"
print(message)
show()
المتغير message موجود داخل Function show() ويستخدم ضمن نطاقها المحلي.
Local Scope هو النطاق الخاص باستدعاء Function والمتغيرات المحلية التي تنشأ داخلها.
def calculate():
result = 10 + 5
print(result)
calculate()
المتغير result محلي داخل calculate(). في هذا الفصل يكفي فهم أن الاسم المحلي يستخدم داخل نطاق Function التي أنشأته، دون الدخول في قواعد Scope المتقدمة.
يمكن تعريف متغير خارج Functions. يسمى هذا في هذا السياق متغيرًا في Global Scope.
message = "Hello"
def show():
print(message)
show()
تم تعريف message خارج Function، ويمكن قراءة قيمته داخل المثال.
لا نحتاج في هذا الفصل إلى تعديل Global Variables من داخل Functions باستخدام أدوات متقدمة.
| المفهوم | Local | Global |
|---|---|---|
| مكان التعريف في الأمثلة الأساسية | داخل Function | خارج Function |
| النطاق الأساسي | Function نفسها | النطاق العام للبرنامج |
| مثال | result داخل Function |
message خارج Function |
يمكن أن يوجد اسم محلي داخل Function دون أن يغير متغيرًا عامًا يحمل الاسم نفسه.
message = "Global"
def show():
message = "Local"
return message
print(show())
print(message)
تعيد Function القيمة "Local"، بينما تبقى قيمة المتغير العام message هي "Global".
يمكن وضع شرط داخل Function واستخدام return لإعادة النتيجة المناسبة.
def check_number(number):
if number > 0:
return "موجب"
else:
return "غير موجب"
print(check_number(5))
بما أن 5 أكبر من 0، تعيد Function النص "موجب".
يمكن استخدام Lists والحلقات والشروط داخل Function لأنك تعلمت هذه المفاهيم في الفصول السابقة.
def count_even(numbers):
count = 0
for number in numbers:
if number % 2 == 0:
count += 1
return count
values = [1, 2, 4, 5, 6]
print(count_even(values))
تمر Function على عناصر List وتعد القيم الزوجية. القيم الزوجية هنا هي 2 و4 و6، ولذلك تعيد القيمة 3.
يمكن أيضًا إرسال Dictionary إلى Function واستخدام مفاتيحها التي تعلمتها في الفصل السابق.
def check_student(student):
if student["score"] >= 60:
return "ناجح"
else:
return "يحتاج إلى مراجعة"
student = {
"name": "Ali",
"score": 75
}
print(check_student(student))
تعيد Function "ناجح" لأن قيمة score هي 75.
إعادة الاستخدام من أهم أسباب كتابة Functions.
def square(number):
return number * number
print(square(2))
print(square(5))
تم تعريف منطق حساب المربع مرة واحدة، ثم استخدم مع قيم مختلفة.
يمكن وضع نص قصير في بداية جسم Function لوصف وظيفتها.
def add(a, b):
"""تعيد مجموع عددين."""
return a + b
النص """تعيد مجموع عددين.""" هو Docstring قصيرة توضح وظيفة الدالة. لا نحتاج في هذه المرحلة إلى أدوات توثيق متقدمة.
كتابة def تنشئ تعريف Function، لكنها لا تعني أن جسمها سينفذ فورًا. يجب استدعاؤها عند الحاجة.
في def greet(name) يكون name Parameter، وفي greet("Ali") تكون "Ali" Argument.
print() وreturnprint() تعرض قيمة، بينما return تعيد قيمة من Function إلى الكود المستدعي.
جسم Function يجب أن يكتب بمسافة بادئة صحيحة.
def greet():
print("مرحبًا")
القيمة الافتراضية تستخدم عندما لا ترسل Argument لذلك Parameter. إذا أرسلت قيمة، تستخدم القيمة المرسلة.
المتغير الذي ينشأ داخل Function في الأمثلة الأساسية يكون محليًا، بينما المتغير المعرف خارج Functions يكون في Global Scope.
إذا كانت التعليمات نفسها مطلوبة عدة مرات، فكر في وضعها داخل Function واضحة بدل نسخها في مواضع متعددة.
عرّف Function باسم greet تطبع رسالة ترحيب، ثم استدعها مرتين.
أنشئ Function تستقبل Parameter باسم name وتعرض اسم المستخدم داخل جملة.
أنشئ Function تستقبل عددين وتعيد مجموعهما باستخدام return، ثم خزّن القيمة المعادة في متغير.
أنشئ Function تحتوي Default Parameter للاسم بالقيمة "زائر"، ثم جرّب استدعاءها مع Argument وبدونها.
أنشئ Function بمعاملين name وage، ثم استدعها باستخدام Keyword Arguments.
أنشئ متغيرًا محليًا داخل Function ومتغيرًا عامًا خارجها، ثم لاحظ أين تستخدم كل قيمة في المثال.
أنشئ Function تستقبل عددًا وتعيد "موجب" إذا كان أكبر من صفر، وإلا تعيد "غير موجب".
أنشئ Function تستقبل List أعداد وتعيد عدد القيم التي تحقق شرطًا بسيطًا باستخدام حلقة for.
def تستخدم لتعريف Function.return تعيد قيمة إلى الكود المستدعي.print() تعرض قيمة، ولا تؤدي الدور نفسه الذي تؤديه return.في الفصل التالي ستتعلم قراءة وكتابة الملفات النصية، وكيفية التعامل مع بيانات محفوظة خارج البرنامج بصورة منظمة.
نشر في ١١ أغسطس ٢٠٢٦