fbpx

تعلم لغة البايثون – الدرس الثاني والعشرون الاغلاق في بايثون Python Closures



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

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

فمثلا:

def transmit_to_space(message):
    "This is the enclosing function"
    def data_transmitter():
        "The nested function"
        print(message)

    data_transmitter()

print(transmit_to_space("Test message"))

سنحصل على النتيجة التالية عند التشغيل

Test message
None

يعمل هذا بشكل جيد حيث يمكن لوظيفة ‘data_transmitter’ الوصول إلى “الرسالة”. لتوضيح استخدام الكلمة الأساسية “غير المحلية” ، ضع في اعتبارك ذلك

def print_msg(number):
    def printer():
        "Here we are using the nonlocal keyword"
        nonlocal number
        number=3
        print(number)
    printer()
    print(number)

print_msg(9)

سنحصل على النتيجة التالية عند التشغيل

3
3

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

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

def transmit_to_space(message):
    "This is the enclosing function"
    def data_transmitter():
        "The nested function"
        print(message)
    return data_transmitter

ونطلق على الوظيفة ما يلي:

def transmit_to_space(message):
  "This is the enclosing function"
  def data_transmitter():
      "The nested function"
      print(message)
  return data_transmitter

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

سنحصل على النتيجة التالية عند التشغيل

Burn the Sun!

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

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

أيضا ، يستخدم الديكور في Python على نطاق واسع عمليات الإغلاق.

تمرين

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

# رمزك هنا

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))

سنحصل على النتيجة التالية عند التشغيل

<script.py> output:
    45





Leave a Reply