الدوال في بايثون: كيف تكتب دالة وتعيد استخدامها
35 دقيقة تقريبًا
- Variables
- Strings and basic data types
- Lists
- Dictionaries
- Conditions
- for loops
- while loops
- break
- continue
- set
- Function
- def
- Function call
- Parameter
- Argument
- return
يحسب العدّاد في الأعلى تمارين الدرس، وعددها 8، أما القراءة وتشغيل الأمثلة فلا تُحتسب.
المشكلة التي تحلها Functions
في الدروس السابقة بدأنا نكتب كود ينفذ تعليمات مختلفة، ومع زيادة حجم الكود ستظهر مشكلة بسيطة، وهي أنك قد تحتاج إلى تنفيذ نفس مجموعة التعليمات أكثر من مرة.
يمكنك بالطبع نسخ نفس الكود في كل مرة، لكن كلما كررت الكود أصبح تعديله أصعب، لأن أي تغيير ستحتاج إلى تكراره في كل نسخة.
الـ Function تسمح لنا أن نضع مجموعة تعليمات تحت اسم واحد، وبعد ذلك نشغل هذه التعليمات كلما احتجنا إليها باستخدام هذا الاسم.
ما هي Function
الـ Function هي مجموعة تعليمات نعطيها اسمًا، ولا يتم تنفيذ هذه التعليمات عند تعريفها فقط، بل يتم تنفيذها عندما نستدعي Function.
أنت استخدمت Functions جاهزة من قبل مثل print، فعندما تكتب print أنت تطلب من Python تشغيل Function موجودة بالفعل.
في هذا الدرس سنبدأ بإنشاء Functions خاصة بنا.
كيف نكتب Function
- نبدأ بكلمة
def، وهي تخبر Python أننا سنعرّف Function جديدة. - بعد
defنكتب اسم Function. - بعد الاسم نكتب قوسين
(). - بعد القوسين نكتب
:. - السطر أو السطور الموجودة داخل Function يجب أن تكون داخلة بمسافة Indentation، لأن Python يحتاج أن يعرف أي تعليمات تنتمي إلى Function.
Hello
- 1Python يقرأ
def say_hello()ويعرف أن هناك Function اسمهاsay_hello. - 2السطر print الموجود بالداخل لا يتم تنفيذه لحظة تعريف Function.
- 3بعد ذلك يصل Python إلى
say_hello(). - 4هنا نحن نستدعي Function.
- 5Python يدخل إلى Function وينفذ
print("Hello"). - 6لذلك يظهر Hello في الناتج.
التعريف وحده لا يشغل Function
Function created
- 1تم تعريف
say_hello. - 2لكننا لم نكتب
say_hello()بعد التعريف. - 3لذلك التعليمات داخل Function لم تعمل.
- 4السطر الوحيد الذي تم تنفيذه هو
print("Function created").
توقع النتيجة
قبل تشغيل الكود، توقع كم مرة ستظهر جملة Checking page.
- 1تم تعريف Function مرة واحدة.
- 2بعد ذلك تم استدعاؤها مرتين.
- 3كل استدعاء ينفذ التعليمات الموجودة داخل Function من البداية.
- 4لذلك تظهر الجملة مرتين.
ما هو Parameter
حتى الآن Function تنفذ نفس الشيء كل مرة، لكن في العمل الحقيقي نحتاج غالبًا إلى إعطائها بيانات مختلفة.
الـ Parameter هو اسم متغير نكتبه داخل تعريف Function حتى تستطيع Function استقبال قيمة عند تشغيلها.
القيمة التي نرسلها عند استدعاء Function تسمى Argument.
Parameter وArgument بمثال بسيط
Hello Islam Hello Sara
- 1عند تعريف greet كتبنا name داخل القوسين، لذلك name هو Parameter.
- 2في الاستدعاء الأول أرسلنا القيمة Islam، لذلك Islam هي Argument.
- 3داخل Function أصبحت قيمة name هي Islam فظهر Hello Islam.
- 4في الاستدعاء الثاني أرسلنا Sara.
- 5تغيرت قيمة name في هذا الاستدعاء فقط إلى Sara فظهر Hello Sara.
تمرير URL إلى Function
Checking: https://example.com/ Checking: https://example.com/about
- 1Function اسمها
show_urlوتستقبل Parameter اسمه url. - 2في الاستدعاء الأول أخذ url قيمة الصفحة الرئيسية.
- 3تم طباعة Checking ثم قيمة url.
- 4في الاستدعاء الثاني أخذ url قيمة صفحة about.
- 5نفس Function عملت على صفحتين مختلفتين من غير أن نكرر منطق الكود.
Function يمكن أن تستقبل أكثر من Parameter
يمكن للـ Function استقبال أكثر من قيمة، وفي هذه الحالة نكتب أكثر من Parameter داخل القوسين ونفصل بينهم بفاصلة.
وعند استدعاء Function نرسل القيم بنفس الترتيب.
URL: https://example.com/ Status: 200
- 1Function تستقبل url وstatus.
- 2القيمة الأولى التي أرسلناها ذهبت إلى url.
- 3القيمة الثانية 200 ذهبت إلى status.
- 4بعد ذلك تم تنفيذ سطري print باستخدام القيم التي استقبلتها Function.
الفرق بين print وreturn
print تعرض قيمة على الشاشة فقط.
أما return فتعيد قيمة من Function إلى المكان الذي استدعاها.
هذا الفرق مهم لأننا غالبًا لا نريد فقط عرض النتيجة، بل نريد الاحتفاظ بها في متغير أو استخدامها في شرط أو في جزء آخر من البرنامج.
أول مثال على return
200
- 1تم تعريف
get_status. - 2عندما استدعينا
get_status()دخل Python إلى Function. - 3وصل إلى return 200 فأعادت Function القيمة 200.
- 4تم تخزين القيمة التي عادت في المتغير
page_status. - 5بعد ذلك طبعنا
page_statusفظهر 200.
return مع Parameter
True False
- 1في الاستدعاء الأول أصبحت قيمة status هي 200.
- 2Python فحص الشرط
status == 200وكانت النتيجة True. - 3return أعادت True وتم تخزينها في result ثم طباعتها.
- 4في الاستدعاء الثاني أصبحت status تساوي 404.
- 5الشرط
404 == 200نتيجته False. - 6return أعادت False ولذلك ظهر False.
Function تتخذ قرارًا بسيطًا
OK Check page
- 1في الاستدعاء الأول وصلت القيمة 200 إلى status.
- 2الشرط
status == 200تحقق. - 3تم تنفيذ
return "OK". - 4في الاستدعاء الثاني وصلت 404.
- 5الشرط لم يتحقق، لذلك انتقل Python إلى else.
- 6تم تنفيذ
return "Check page".
استخدام Function داخل Loop
Checking: https://example.com/ Checking: https://example.com/about Checking: https://example.com/contact
- 1لدينا List تحتوي على ثلاثة URLs.
- 2عرّفنا Function اسمها
check_urlوتستقبل URL واحدًا. - 3بدأ for loop وأخذ أول URL من القائمة.
- 4تم إرسال هذا URL إلى
check_urlفتمت طباعته. - 5عاد Loop وأخذ URL الثاني وشغل نفس Function.
- 6تكرر الأمر مع URL الثالث.
- 7هنا Loop مسؤولة عن المرور على الصفحات، وFunction مسؤولة عن العمل الذي نريد تنفيذه على كل صفحة.
مثال SEO جامع
https://example.com/ -> OK https://example.com/about -> OK https://example.com/old-page -> Check status
- 1لدينا List اسمها pages، وكل عنصر داخلها Dictionary يحتوي على url وstatus.
- 2Function اسمها
audit_pageوتستقبل صفحة واحدة. - 3داخل Function نفحص قيمة status.
- 4إذا كانت 200 نطبع URL ومعها OK.
- 5إذا لم تكن 200 نطبع URL ومعها Check status.
- 6for loop تمر على كل Dictionary داخل pages.
- 7في كل دورة ترسل الصفحة الحالية إلى
audit_page. - 8بهذا فصلنا مسؤوليتين، Loop تمر على البيانات، وFunction تنفذ الفحص على كل صفحة.
أكمل الكود
أكمل الفراغات حتى تنشئ Function تستقبل URL وتطبعه.
اكتشف الخطأ
الكود التالي يحتوي على خطأ في Indentation، أصلحه ثم شغله.
راجع فهمك
متى يتم تنفيذ التعليمات داخل Function؟
ما الفرق الأساسي بين print وreturn؟
الخلاصة
Function تسمح لك بوضع مجموعة تعليمات تحت اسم واحد ثم إعادة استخدامها.
نستخدم def لتعريف Function، لكن Function لا تعمل إلا عند استدعائها.
Parameter هو الاسم الذي تستقبل من خلاله Function البيانات، وArgument هي القيمة الفعلية التي نرسلها عند الاستدعاء.
print تعرض النتيجة، بينما return تعيد قيمة يمكن تخزينها أو استخدامها في جزء آخر من الكود.
عند دمج Functions مع Loops وConditions نبدأ في بناء Workflow حقيقي بدل كتابة تعليمات منفصلة ومكررة.
اختبار الدرس الخامس
السؤال الأول
توقع الناتج قبل تشغيل الكود.
السؤال الثاني
اكتب Function بترجّع نتيجة
اكتب Function اسمها page_result تستقبل status، إذا كانت 200 تعيد OK، وفي غير ذلك تعيد Check، ثم اطبع نتيجة استدعائها بالقيمة 404.
السؤال الثالث
Function جوه Loop
لديك قائمة URLs، أنشئ Function اسمها show_url تستقبل URL واحدًا وتطبعه، ثم استخدم for loop لتشغيل Function على كل URL في القائمة.
بقيت تمارين لم تحلّها
0/8التمارين المتبقية: 8 من 8. يُحتسب الدرس مكتملًا حين تحلّها كلها، ويمكنك العودة إليها متى شئت.
أحسنت، وصلت إلى نهاية الدرس.