Ali Ali38 نشر 12 سبتمبر 2022 أرسل تقرير نشر 12 سبتمبر 2022 كنت أقوم بدراسة التوابع فظهر لي مثال لتابع داخل تابع و حاولت تقليده في المثال التالي: def f(name): def say_hello(): print(f'hello {name}') return say_hello g = f('ali') g() لكن لم أفهم تماماً لماذا قام بطباعة hello ali كيف عرف التابع say_hello قيمة name مع أننا لم نقم بتمريرها له. 1 اقتباس
1 Kais Hasan نشر 12 سبتمبر 2022 أرسل تقرير نشر 12 سبتمبر 2022 إن هذا المفهوم يدعى ال closure و هو عبارة عن فضاء اسماء يضاف إلى فضاء الأسماء المحلي الخاص بالتابع، عندما تقوم بكتابة تابع داخل تابع فإن التابع الداخلي يستطيع الوصول إلى كافة المتحولات المعرفة (و الممررة) في التابع الخارجي، و بالتالي هذه المتحولات ستكون ضمن فضاء الاسماء الخاص به. عند إرجاع هذا التابع فإن فضاء الأسماء الخاص به سيكون يحتوي على هذه المتحولات و بالتالي ستأخذ القيمة الصحيحة لها. بشكل دقيق هنا في مثالك هذا، فإن التابع say_hello هو تابع داخلي بينما التابع f هو تابع خارجي. التابع say_hello يستطيع الوصول إلى المتحول name بشكل طبيعي حيث أنه معرف داخل التابع f، و عند تمرير اسمك (أي قيمة محددة) للتابع f فإن هذا المتحول أخذ قيمة هي اسمك، و هذا القيمة أصبحت مرتبطة بالمتحول في فضاء الاسماء و بالتالي الأمر ذاته بالنسبة للتابع say_hello و عند إرجاع هذا التابع ستكون القيمة لا تزال في فضاء اسماءه و هذا ما ظهر من خلال المثال عندما قام بطباعة القيمة المطلوبة للمتحول name. 1 اقتباس
السؤال
Ali Ali38
كنت أقوم بدراسة التوابع فظهر لي مثال لتابع داخل تابع و حاولت تقليده في المثال التالي:
لكن لم أفهم تماماً لماذا قام بطباعة hello ali كيف عرف التابع say_hello قيمة name مع أننا لم نقم بتمريرها له.
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.