دالة داخل دالة اخرى

كنت اريد ان اعرف تجربتكم مع الدرس الخاص بدالة داخل دالة اخرى

لاني لم استطيع فهم هذا الدرس و كيفية جعل دالة تتواصل مع دالة اخرى

3 إعجابات

ما هو سؤالك…مالذي لم تفهمه؟؟

3 إعجابات

اجد صعوبة في جعل الدوال تتواصل معا

إعجابَين (2)

جرب هذا الشرح؟؟

في بايثون، يمكن للدوال أن تتواصل مع بعضها من خلال تمرير القيم (parameters) أو إرجاع القيم (return values).

مثال بسيط: دالتان تتواصلان معًا

لدينا دالة تحسب مربع رقم، ودالة أخرى تستخدم نتيجة الدالة الأولى لطباعة النتيجة.

# Function to calculate the square of a number
def calculate_square(number):
    return number ** 2  # Return the square of the number

# Function to print the square of a number
def print_square(number):
    result = calculate_square(number)  # Call the first function and get the result
    print(f"The square of {number} is {result}")

# Calling the second function
print_square(5)

شرح الكود:

  1. calculate_square(number): تأخذ رقمًا وتحسب مربعه ثم تعيده.
  2. print_square(number):
    • تأخذ رقمًا كمدخل.
    • تستدعي الدالة calculate_square(number) للحصول على مربع الرقم.
    • تطبع النتيجة باستخدام print.
  3. عند استدعاء print_square(5)، يتم تنفيذ العمليات بالترتيب الصحيح.

الإخراج:

The square of 5 is 25

بهذه الطريقة، يمكن للدوال أن تتواصل مع بعضها بسهولة عبر تمرير القيم واسترجاع النتائج! هل لديك أي استفسار إضافي؟

3 إعجابات

شكرا جزيلا على المساعدة :hugs:

3 إعجابات

تواصل الدوال مع بعضها له عدة أهداف سأحاول الشرح حسب فهمي وأتمنى أن يفيدك

يمكنك استخدام تواصل الدوال مع بعضها لأجل أن توفر على نفسك أسطر وكذلك توفر على نفسك تذكر تفاصيل صغيرة في الكود

مثلا عندك مشروع مكتبة
قمت بعمل دالة (function) لحذف الشاشة
ودالة أخرى لأجل عرض الخيارات
ودالة ثانية إذا اختار المستخدم 1
ودالة ثالثة إذا اختار المستخدم 2
ودالة رابعة إذا اختار المستخدم 3

import os

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')
def app_choices():
    print("Welcome to your library!\n")
    print("What do you want to do?")
    print("1. Add a book")
    print("2. Remove a book")
    print("3. Display all books")
    print("4. Exit")
def add_book():
    input("Add book ")

def remove_book():
    input("Remove book ")

def display_all_books():
    input("Display all books ")

ثم قمت بعمل while loop لأجل أن يظل البرنامج يعمل حتى يختار المستخدم الخروج
الآن انت ستقوم باستدعاء دالة الخيارات ثم تضع input للمستخدم ليختار ثم if لكل اختيار تعرض الدالة الخاصة به وقبل كل دالة تكتب الدالة الخاصة بحذف الشاشة

while True:
    clear_screen()
    app_choices()
    user_choice = input("\nEnter your choice: ")
    if user_choice == '1':
        clear_screen()
        add_book()
    elif user_choice == '2':
        clear_screen()
        remove_book()
    elif user_choice == '3':
        clear_screen()
        display_all_books()
    elif user_choice == '4':
        print("\nExiting the program...\n")
        break
    else:
        input("\nInvalid Choice! ")

ولكن هذا مثال بسيط فماذا لو عندك مشروع كبير وفيه الكثير من الدوال مثلا مائة دالة وستقوم بالاستدعاء منهم ألف مرة فهل ستستدعي دالة الحذف أيضا ألف مرة؟

ألن يكون الأفضل أن تجعل كل دالة تحذف الشاشة تلقائيا عند بدايتها فتكون كتبت دالة حذف الشاشة مائة مرة فقط وتوفر على نفسك 900 سطر؟

فهذا من فوائد تواصل الدوال مع بعضها وإذا قمنا بتعديل الكود البسيط الذي كتبناه في الأعلى يصبح هكذا

def app_choices():
    clear_screen()
    print("Welcome to your library!\n")
    print("What do you want to do?")
    print("1. Add a book")
    print("2. Remove a book")
    print("3. Display all books")
    print("4. Exit")
def add_book():
    clear_screen()
    input("Add book ")

def remove_book():
    clear_screen()
    input("Remove book ")

def display_all_books():
    clear_screen()
    input("Display all books ")
while True:
    app_choices()
    user_choice = input("\nEnter your choice: ")
    if user_choice == '1':
        add_book()
    elif user_choice == '2':
        remove_book()
    elif user_choice == '3':
        display_all_books()
    elif user_choice == '4':
        print("\nExiting the program...\n")
        break
    else:
        input("\nInvalid Choice! ")

وهكذا انت جعلت الدوال تتواصل مع بعضها حينما جعلت دالة حذف الشاشة داخل دالة أخرى

وهناك هدف آخر من استخدام تواصل الدوال وهو جعل الكود نظيف أي واضح ومنظم وسهل القراءة والتعديل فيما بعد

فمثلا عندك دالة ولنفترض ان اسمها write (اكتب) وهذه الدالة وظيفتها أن تكتب رسالة ولكن لكي تكتب هذه الرسالة تحتاج pen (قلم) و ink (حبر) وكل منهما يحتاج عمليات كثيرة لأجل تصنيعه

فإذا كتبت كل الأكواد الخاصة بتصنيع القلم والحبر داخل دالة الكتابة سيكون الكود صعب القراءة والتعديل ولكن إذا انشأت دالة خاصة بتصنيع القلم ودالة أخرى خاصة بتصنيع الحبر ثم استدعيتهم داخل دالة الكتابة يصبح الكود أكثر تنظيما وأسهل للقراءة والتعديل

هذا مثال تخيلي مبسط جدا للكود

def make_ink():
    return "Red Ink"

def make_pen():
    return "Cool Pen"

def write():
    given_ink = make_ink()
    given_pen = make_pen()
    write_something = f"{given_ink} + {given_pen} = Extra Cool Message"
    print(write_something)

write()

النتيجة عند التشغيل :backhand_index_pointing_down:
Red Ink + Cool Pen = Extra Cool Message

أتمنى أن يكون الشرح مفيدا وسهلا وبالتوفيق :dizzy:

4 إعجابات

مثلما قلت عن حذف الردود والموضوعات

حتى الموضوع الذي نشرتهِ عن المشكلة تم حذفه

لابد أنه مدير المنتدى فهذا الموقع مطور من مايكروسوفت وليس من تطوير الاستاذ ليتم اختراقه

4 إعجابات