تعلم لغة البايثون – الدرس الثاني والعشرون الاغلاق في بايثون 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