Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!

Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount

الإغلاقات


الدوال المغلقة (Closure)

الدالة المغلقة هي كائن دالة يتذكر القيم في النطاقات المحيطة حتى لو لم تكن موجودة في الذاكرة. دعونا نبدأ في فهمها خطوة بخطوة.

أولاً، الدالة المتداخلة هي دالة معرفة داخل دالة أخرى. من المهم جدًا ملاحظة أن الدوال المتداخلة يمكنها الوصول إلى المتغيرات في النطاق المحيط. ومع ذلك، على الأقل في بايثون، تكون هذه المتغيرات للقراءة فقط. ومع ذلك، يمكن استخدام الكلمة المفتاحية "nonlocal" صراحة مع هذه المتغيرات لتعديلها.

على سبيل المثال:

def transmit_to_space(message):
    "هذه هي الدالة المحيطة"
    def data_transmitter():
        "الدالة المتداخلة"
        print(message)

    data_transmitter()

print(transmit_to_space("Test message"))

يعمل هذا بشكل جيد حيث يمكن لدالة 'data_transmitter' الوصول إلى 'message'. لإظهار استخدام الكلمة المفتاحية "nonlocal"، يعتبر هذا المثال:

def print_msg(number):
    def printer():
        "هنا نحن نستخدم الكلمة المفتاحية nonlocal"
        nonlocal number
        number = 3
        print(number)
    printer()
    print(number)

print_msg(9)

بدون استخدام الكلمة المفتاحية nonlocal، سيكون الناتج "3 9"، بينما باستخدامها نحصل على "3 3"، وهو ما يعني أن قيمة المتغير "number" تتغير.

الآن، ماذا عن إرجاع كائن الدالة بدلاً من استدعاء الدالة المتداخلة من داخلها. (تذكر أن الدوال نفسها تعتبر كائنات. (إنه بايثون.))

def transmit_to_space(message):
    "هذه هي الدالة المحيطة"
    def data_transmitter():
        "الدالة المتداخلة"
        print(message)
    return data_transmitter

ونقوم باستدعاء الدالة كما يلي:

def transmit_to_space(message):
    "هذه هي الدالة المحيطة"
    def data_transmitter():
        "الدالة المتداخلة"
        print(message)
    return data_transmitter

fun2 = transmit_to_space("Burn the Sun!")
fun2()

على الرغم من أن تنفيذ "transmit_to_space()" قد اكتمل، إلا أن الرسالة تم المحافظة عليها. تُعرف هذه التقنية التي يتم بها إرفاق البيانات ببعض الشفرة البرمجية حتى بعد انتهاء تلك الدوال الأصلية الأخرى باسم الدوال المغلقة في بايثون.

المزايا : يمكن للدوال المغلقة تجنب استخدام المتغيرات العامة وتوفير بعض أشكال إخفاء البيانات. (على سبيل المثال، عندما يكون هناك عدد قليل من الطرق في الفصل، استخدم الدوال المغلقة بدلاً من ذلك).

أيضاً، المُزخرفات (Decorators) في بايثون تعتمد بشكل كبير على الدوال المغلقة.

Exercise

قم بعمل حلقة متداخلة ودالة مغلقة في بايثون لإنشاء دوال للحصول على عدة دوال للضرب باستخدام الدوال المغلقة. أي باستخدام الدوال المغلقة، يمكن إنشاء دوال لإنشاء الدالّة multiply_with_5() أو الدالّة multiply_with_4() باستخدام الدوال المغلقة.

# your code goes here multiplywith5 = multiplier_of(5) multiplywith5(9) def multiplier_of(n): def multiplier(number): return number*n return multiplier multiplywith5 = multiplier_of(5) print(multiplywith5(9)) test_output_contains("45") success_msg("Great work!")

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

Previous Tutorial Next Tutorial Take the Test
Copyright © learnpython.org. Read our Terms of Use and Privacy Policy