حسنا.
انتهى أخيرًا إدخال هذه القائمة الضخمة في الذاكرة.
لكن تذكر مصطلحاتنا الرئيسية.
تذكر كيف قلت أن القائمة قابلة للتكرار؟
ما هو التكرار؟
حسنًا ، العنصر القابل للتكرار هو أي كائن في بايثون يمكننا أن نلفه تحت الغطاء.
لديها طريقة دخول dunder.
لذلك عندما يتم إنشاء الكائن ، يسمح لنا هذا المحرر بالحصول على كائن قابل للتكرار
يمكن تكراره لتكرار شيء ما أو التكرار هو فعل أخذ عنصر من عنصر متكرر يفعل شيئًا به ، ثم الانتقال إلى العنصر
التالي.
ما نستخدمه مثل حلقات for أو while loops نسميه التكرار.
إنها العملية نفسها.
والمولدات.
هي في الواقع قابلة للتكرار.
هذا هو كل ما هو مولد قابل للتكرار.
يمكنك تكرارها ، ولكن ليس كل ما هو متكرر هو منشئ.
على سبيل المثال ، النطاق هو مولد.
لذلك سيكون هذا دائمًا متكررًا.
لكن القائمة قابلة للتكرار ، لكنها ليست منشئًا.
لذا فإن المولد هو مجموعة فرعية من المتكرر.
أعلم أن هذه كلمات كثيرة.
آمل أنك ما زلت معي.
الفرق بين المولد والتكرار العادي هو الطريقة التي نطبقها بها.
لذا دعني أوضح لك طريقة عامة لإنشاء مولد.
دعنا نمسح هذا الرمز ونحدد المولد الخاص بنا.
والمولدات عادةً ما تكون وظائف تمامًا مثل وظيفة المدى.
عادة ما يتم إنشاء المولدات بهذه الطريقة.
لذلك دعنا نقول وظيفة المولد.
وستكون وظيفة المولد هذه عبارة عن أربع حلقات ستدور عبر نطاق تمامًا كما كان لدينا
من قبل.
لكن الاختلاف هنا ، دعنا نعيد الشفرة التي كانت لدينا من قبل.
ستعلق على هذا حتى نتمكن من رؤيته من حيث الاختلاف.
ستذهب وظيفة المولد إلى.
قم بإنشاء ، دعنا نقول ، هذه العناصر العديدة.
ولكن بدلاً من العودة كما نفعل في وظيفة عادية ، سنستخدم كلمة رئيسية تسمى العائد.
وها نحن ذاهبون إلى أنا وبالتالي العنصر.
لذا لاحظ الفرق هنا.
الآن ، إذا أردنا ، تمامًا مثل هنا ، يمكننا تمرير رقم.
مثله.
لكن بدلاً من العودة.
وإلحاق هذه القائمة وإنشاء كل هذه البيانات سنستخدمها دائمًا.
الآن ماذا يفعل Hield؟
كما ترى ، يوقف Hield الوظيفة مؤقتًا ويعود إليها عندما نفعل شيئًا لها ، وهو ما يسمى بعد ذلك ، وهو
الشيء الذي سنغطيه قريبًا.
لذلك يقول Hield ، مرحبًا ، أوقف الوظيفة مؤقتًا ، فقط Hield أعطيها وعندما تخبرني أن أستمر في العمل مرة أخرى
، سأستمر في ذلك.
إذا كيف يمكننا أن نفعل هذا؟
حسنًا ، يمكنني أن أقول عن العنصر في وظيفة المولد.
انا ذاهب الى.
مطبعة.
البند.
الآن هنا ، ما سيحدث هو أننا سنقوم بتكرار وظيفة المولد وسنقوم بإعطائها لوظيفة المولد
، دعنا نقول 1000 في الوقت الحالي.
وسنطبع كل عنصر في وظيفة المولد لأن هذا متكرر.
سوف يتم تشغيله وسوف يتكرر.
ولكل عنصر في هذا الرقم بحيث يكون نطاقًا ، سنحصل على Y لذلك سوف يستمر في التكرار
والتكرار.
وعندما نعود ، نعود مرة أخرى.
سنقوم بتشغيل هذا والعائد.
يعود ويركض مرة أخرى.
اسمحوا لي أن أريكم ما أعنيه.
سأقوم بالتعليق على هذا ، والتعليق على هذا أيضًا.
وفقط انقر فوق تشغيل هنا.
هل رأيت ذلك؟
ما فعلناه للتو هنا مشابه لأسفل هنا ، ولكن بدلاً من الاضطرار إلى إنشاء تلك القائمة في الذاكرة ، استمر
العمل واحدًا تلو الآخر.
احتفظنا بذاكرة واحدة فقط.
وقد استخدمناها كما أردنا.
في حالتنا ، كل ما فعلناه هو طباعة عنصر.
دعنا نستكشف هذه الكلمة الرئيسية أكثر قليلاً.
ماذا يفعل فعلا؟
لنفترض أننا نريد ضرب هذا في اثنين ، تمامًا كما فعلنا هنا في مثالنا الأصلي مع القوائم.
لكن الآن ، بدلاً من عمل الحلقة الأربعة ، دعنا فقط نسمي الدالة.
ونقول ، جي ، تساوي وظيفة المولد وسنقدمها 100.
الآن إذا قمت بطباعة G وقمت بالنقر فوق تشغيل.
ترى أن؟
أحصل على كائن منشئ.
وتذكر أن هذه هي الطريقة القياسية في Python حيث يمكننا إنشاء وظيفة مولد باستخدام النطاق
والكلمة الأساسية للإنتاج.
لكن هذه الكلمة الأساسية تعطينا بعض القوة لأنني إذا عدت للتو إلى هنا.
لن نحصل على أي شيء مميز.
في واقع الأمر ، سنحصل على قيمة بدلاً من ذلك باستخدام الكلمة الأساسية للإنتاجية.
ما يمكننا القيام به هو تحويل هذا إلى وظيفة مولد يمكنها القيام بعمل جيد.
هذا يمكنني أن أقول ز المقبل.
الآن إذا قمت بطباعة G التالي هنا وقمت بالنقر فوق تشغيل.
أحصل على صفر.
لكن هذا جزء رائع.
إذا قمت بعمل G مرتين ثم مرة واحدة هنا وقمت بطباعته.
أحصل عليه.
لماذا هذا؟
تذكر الكلمة الرئيسية توقف الوظيفة مؤقتًا.
إذن ما حدث هنا هو أنني قمت بتشغيل الدالة بـ 100.
العنصر الأول في النطاق 100 كان صفرًا.
الصحيح.
الآن هنا قبل أن أتمكن من تشغيل هذا ، قال ، مرحبًا ، هذه وظيفة مولد ، لكن في المرة الأولى التي تقوم فيها
بتشغيلها.
أعط الناتج صفرًا في اثنين حتى في المرة الأولى التي نشغل فيها هذه الوظيفة ، ثم أنقر فوق تشغيل.
سوف نتأكد من تغيير ذلك إلى أنا.
هذا مجرد صفر.
إذا قمت بتشغيله مرة أخرى مثل هذا ، فعندئذ يكون لدينا.
الآن أريدك أن تكرر وتذهب إلى واحد.
إذن واحد في اثنين.
ما هذا؟
حسنًا ، واحد في اثنين.
اسمحوا لي أن أصلح ذلك.
مثله.
تأكد من أن هذا هو أنا ، سأحصل على اثنين لأن واحدًا في اثنين يساوي اثنين.
إذا قمت بتشغيله مرة أخرى وقمت بالنقر فوق تشغيل.
أحصل عليه.
هل ترى.
Hield ، كما قلت من قبل ، يوقف الوظيفة مؤقتًا ويعود إليها عند الاتصال التالي.
لذلك إذا كانت تحتوي على كلمة رئيسية للإنتاجية ، فإنها تصبح مولدًا.
إنه يتتبع هذه الحالة ، ما نسميه القيمة ، ويحتفظ فقط بأحدث البيانات في الذاكرة ، على سبيل المثال
، لأنه يتذكر ذلك لأنه على سبيل المثال ، لنفترض السطر 14 إذا قمت بطباعة G.
يتذكر أنني كنت في السابق.
حسنًا.
الآن ، على الرغم من تشغيل هذا الجزء من التعليمات البرمجية بالفعل ، إذا قمت بتشغيله عبر الإنترنت ، السطر 14.
أحصل على ستة؟
لأن ثلاثة في اثنين يساوي ستة ، تذكر ، لأنه يتم ضربها في اثنين.
لذا دعني أسألك هذا.
إذا دعنا نقول إنني أقوم بعمل نطاق واحد فقط هنا.
وتعلم ماذا؟
دعنا فقط نحذف الضرب في اثنين.
إذا قمت بذلك وركضت بعد ذلك أكثر من مرة ، أكثر من مرة ، ماذا سيحدث إذا قمت بالنقر فوق "تشغيل" هنا؟
لقد حصلت على توقف.
تكرار.
كما ترى ، يمكن استدعاء التالي عدة مرات كما نريد.
عدة مرات حتى تنتهي صلاحية هذا النطاق.
وعندما نتجاوز عدد العناصر في النطاق.
حسنًا ، حصلنا على خطأ إيقاف التكرار.
لإعلامنا بذلك ، لا يمكنك الاتصال بعد الآن.
لقد وصلنا إلى نهاية السطر وعندما نستخدم حلقات for ذات النطاقات ، فإنها في الواقع تكتشف هذا تحت غطاء
المحرك من أجلك.
لذلك نحن قادرون على تشغيل وظيفة مثل هذه حيث نستخدم النطاق ، على الرغم من أن النطاق عبارة عن مولد ، لأن الحلقة
for تقول تلقائيًا ، مرحبًا ، سأتوقف عن التكرار بمجرد أن أواجه هذا التوقف عن التكرار ، ولكن هذا
مخبأة بعيدًا عنا كمستخدمين.
الآن ، من الصعب جدًا فهم مفهوم المولدات ، خاصة في البداية.
لذلك قد تضطر إلى النظر إلى هذا عدة مرات ، لكن في الفيديوين التاليين ، أريد
أن أقنعكم بمدى قوتهم.
سأراك في اليوم التالي.