حسنًا ، لنلعب لعبة صغيرة.
هل يمكنك تخمين ما ستكون عليه مخرجات هذا البرنامج؟
لدي هنا أكثر من واحد يساوي.
ثم نقوم بإنشاء دالة تسمى الارتباك ، حيث يكون لدينا a يساوي خمسة ونعيد a.
سؤالي هو عندما نطبع A وعندما نطبع الارتباك ، ماذا تتوقع أن يحدث هنا؟
خذ ثانية لمعرفة وقفة إذا كنت بحاجة إلى ذلك.
ودعونا نكتشف ذلك.
واحد وخمسة.
هل هذا ما توقعته؟
لنذهب.
سطر بسطر.
أولاً نقوم بتعيين قيمة واحد إلى المتغير A ، ثم نقوم بإنشاء وظيفة تسمى الارتباك وسيقول مترجم بايثون ، حسنًا
، ارتباك ، وظيفة.
أعلم ما هو.
سأضعها في الذاكرة.
عندما تحتاج إلى استخدامي ، فقط أخبرني.
وبعد ذلك سوف ينتقل إلى السطر الثامن والسطر الثامن سيقول ، مهلا ، اطبع ما هو البئر ، المرة
الوحيدة التي رأيت فيها a هنا هي تساوي واحدًا.
إذن ، انتقل إلى الذاكرة ، دعنا نقول أن أ يساوي واحدًا.
ولكن بعد ذلك عندما أجري ارتباكًا مثل هذا.
سأقول ، مهلاً ، a سيساوي خمسة والآن نعيد A وهو خمسة.
OC ماذا لو قمت بتغيير ترتيب هذا؟
ماذا لو ذهبت هكذا؟
ماذا سيحدث إذا قمت بالنقر فوق "تشغيل"؟
هل هذا ما توقعته؟
مرة أخرى ، لدينا واحد يساوي واحدًا.
ثم نحدد الوظيفة ، ثم نطبع الارتباك.
الارتباك الآن سيؤدي إلى تعيين a يساوي خمسة ثم إرجاع a.
لكن لماذا لم يتغير هذا؟
لماذا لا يزال يساوي واحدًا عند وصولنا إلى هنا؟
وهذا بسبب النطاق ، أليس كذلك؟
ما يفعله مترجم بايثون هو عندما يقوم بتشغيل وظيفة الارتباك ، سيقول ، مهلاً
، a سيساوي خمسة.
لكني أقوم بإنشاء متغير هنا يسمى A في كوني.
لا أعرف أي شيء عن أحد يساوي هنا.
لدي كون خاص بي.
وبعد تشغيل هذه الوظيفة ، حسنًا ، لقد انتهينا.
لقد أعدنا الوظيفة وذهبت تمامًا.
لكننا لم نترك الكون في النطاق العالمي.
إذن ، هناك مجموعة من القواعد التي يمر بها مترجم بايثون للتحقق من متغير.
والقواعد هي هذه.
أولاً ، سوف تتحقق من الأمر مع المحلي.
لذا ابدأ بالمحلي.
وما نسميه هو نطاق محلي.
النطاق المحلي هو نطاق يمثل جزءًا من هذه الوظيفة المحلية.
لذا فإن النطاق المحلي.
سوف تحقق هناك.
مهلا ، هل أعرف المتغير؟
حسنًا ، نعم ، عندما أعود.
أ لدي متغير محدد هنا لذا فهو يبدأ من هناك.
ولكن لنفترض أن A لم يكن هناك ، فلنفترض أنني أزلت أ وأنقر على تشغيل هنا.
حصلت على كليهما مرة واحدة لأن القاعدة الثانية هي أنه إذا لم يكن هناك شيء في المتغير المحلي أو النطاق
المحلي ، ثم الرقم الثاني ، فهل هناك نطاق محلي أصلي؟
في حالتنا ، ما هو أصل هذه الوظيفة؟
حسنًا ، إنه النطاق العالمي.
لكن يمكننا أيضًا القيام بوظيفة أخرى.
لنفترض أن الوالد والوالد هما أحد الوالدين لوظيفة الارتباك.
وهنا ، لنفترض أن أ يساوي عشرة.
الآن هنا.
سوف نعود.
ارتباك فقط حتى نتمكن من استخدامه مرة أخرى وتشغيله بالفعل.
لذلك دعونا ندعو الوالدين.
وانقر فوق تشغيل.
حسنًا ، لنستعرض هذا.
لذلك ليس الأمر محيرًا للغاية.
لدينا وظيفة الوالدين التي يتم استدعاؤها.
لذلك عندما نسمي ذلك ، نحدد a يساوي عشرة.
ثم نخلق أيضًا ارتباكًا جديدًا للدالة.
ثم في النهاية نعود إلى الارتباك ونشغلها بالفعل.
سنقوم بإرجاع a ثم هنا نطبع أيًا كانت قيمة A ، وهي عشرة.
ولما ذلك؟
حسنًا ، لأننا نبدأ أولاً بالنطاق المحلي.
مهلا ، هل يعرف الارتباك ما هو؟
لا.
ليس لدي في النطاق المحلي الخاص بي.
OC هل مدرسة والدي المحلية لديها ذلك؟
لذلك سوف يرتفع المستوى ويقول ، مرحبًا ، هل تعرف وظيفة الوالدين ما هي؟
نعم ، لديّ يساوي عشرة ، لذا سأطبع ذلك.
القاعدة الثالثة أو الترتيب الثالث عالمي.
والعالمية هي ما نسميه المسافة البادئة للشيء.
إنه هذا الملف ، أليس كذلك؟
مهما كان الملف ، فهذا عالمي.
في حالتنا ، إذا كان A يساوي عشرة غير موجود هنا ، فلا يوجد مكان محلي ، ولا يوجد أصل محلي.
وأنا انقر فوق تشغيل.
يتحقق من النطاق العالمي.
وأخيرًا ، هناك قاعدة أخرى ، وهي رقم أربعة ، وهي قاعدة صعبة.
وهذا ما نسميه مبني في بايثون.
أو بنيت في وظائف بيثون.
إذن ، تأتي لغة بايثون بوظائف محددة مسبقًا مثل؟
حسنًا ، المبلغ الذي تحدثنا عنه من قبل.
هذا البعض دعنا نقول ، فقط أعطها خمسة.
سوف نتحقق أو في الواقع ، دعونا لا نعطيه أي شيء.
لنقم ببعض هنا.
عندما أقوم بتشغيل هذا.
أنا بنيت في بعض الوظائف.
حاليا.
كيف عرفوا ما هذا؟
ماذا كان هذا المتغير في نهاية اليوم؟
حسنًا ، لأنه قال ، مهلاً ، هل لديّ بعض ما بداخل هذا الكون؟
لا.
أنا لا.
هل لدي بعض في نطاق والدي؟
كلا ، لا أفعل.
هل لدي بعض في العالمية؟
لا.
لا يوجد شيء هنا.
وبعد ذلك ، فإن الشيء الأخير الذي سيتحقق منه هو ، هل هناك نوع من وظيفة مضمنة في Python؟
نعم.
في الواقع ، تعطينا Python بعضًا حتى تتمكن من استخدامها حتى لا تخطئ.
وهذه هي قواعد النطاق التي يتبعها مترجم بايثون.
رائع جدا.
لا يزال هناك عدد قليل من الأشياء التي نحتاج إلى تعلمها.
لذلك سأراك في الفيديو التالي.