cb
codebamin
الفصل 9 · الدوال البرمجية (Functions)

استدعاء الدوال من دوال أخرى

يمكن أن يحتوي جسم الدالة على أي تعليمات، ومن ضمنها استدعاءات دوال أخرى. وقد فعلنا ذلك بالفعل عندما استدعينا print. واستدعاء دالة كتبناها نحن لا يختلف من حيث المبدأ؛ يمكن لدوالنا أن تستدعي بعضها بعضًا.

مثلًا يمكن تنفيذ print_twice بالاعتماد على print_many:

__program_indented__

تتبّع البرنامج سطرًا بسطر أثناء استدعاء دالة من داخل دالة أخرى. راقب كيف يبدأ استدعاء print_twice، ثم ينتقل التنفيذ مؤقتًا إلى print_many، ثم يعود إلى المكان الذي تم منه الاستدعاء بعد انتهاء الدالة الداخلية.

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

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

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

solution.py
1
2
3
4
5
6
7
8
9
10
الطرفية (shell)
>>>