جوزيه: أهلا ومرحبا بكم مرة أخرى.
في هذا الفيديو ، ننظر إلى العناصر التكرارية في بايثون.
في الفيديو الأخير ، نظرنا إلى
التكرارات ، فماذا في هيك قابل للتكرار؟
حسنًا ، العنصر القابل للتكرار
هو كائن له طريقة __iter __ () ، أو طريقة __iter __ ().
لذلك شيء يشبه هذا.
بمجرد تحديد هذه الطريقة في أي كائن ، فهذا
الآن قابل للتكرار.
لذلك دعونا نحدد شيئًا ما هنا.
دعونا نحدد FirstHundredIterable.
ستقوم FirstHundredIterable
هذه بتعريف طريقة __iter __ () أو __iter () هذه ، وهذه الطريقة
__iter __ () تخبر Python أنك تريد أن تكون قادرًا على
تكرار هذا التكرار ، كما هو الحال في حلقة for ، أو
تريد القيام بذلك بعضها ، أو تريد
تحويله إلى قائمة.
ماذا يجب أن تعود؟
يجب أن يعود مكرر.
لذا قم بإرجاع FirstHundredGenerator ().
الآن يمكنك القيام بشيء مثل
طباعة مجموع FirstHundredIterable
، وسوف يعجبك ، وسيخبرك بـ 4950.
يمكنك أيضًا تكرارها باستخدام
حلقة for وستكون جيدة.
ستعطيك أيضًا جميع الأرقام الموجودة هناك.
هذا ما يجعله قابلاً للتكرار.
لا شيء سحري ، لا يجب أن تفعل أي شيء مفتعل.
بالنسبة إلى Python ، لكي تصبح متكررة ، كل ما عليك
فعله هو تحديد هذه الطريقة ، ويجب أن تعيد هذه الطريقة
شيئًا يمكنك استدعاء
__next __ () عليه.
يجب أن تعيد مكرر.
جميع المولدات هي مكررات
، لذلك بالطبع يمكن أن تكون مولدًا.
الآن إذا كنت تريد أن تجعل هذا أبسط قليلاً ، وهو ما
يمكنك القيام به ، فبدلاً
من إعادة فصل دراسي منفصل إلى FirstHundredIterator
، يمكنك أن تسأل نفسك ...
هناك طريقة __iter
__ () هنا والتي تعيد كائنًا من هذا النوع.
ما هو FirstHundredGenerator
() في سياق هذه الفئة؟
هذا سؤال غامض إلى حد ما ، لكنني سأقول إنه ذاتي.
الذات هي دائمًا الكائن الحالي
، وما تفعله هنا هو أنك تعيد كائنًا ، لذا
يمكنك بالتأكيد القيام
بذلك.
الآن لم تعد بحاجة إلى برنامج FirstHundredIterable
هذا ، ويمكنك فقط إرجاع FirstHundredGenerator () هنا ،
وسيظل كذلك الآن.
الآن أصبح منشئك مربكًا بعض الشيء
لأنه مكرر وقابل للتكرار ، وقد يكون ذلك مربكًا في
بعض الحالات ، ولكنه قد يكون مفيدًا
حقًا في حالات أخرى لأنه
أقصر بكثير من وجود فصل منفصل للقيام
بذلك نيابة عنك.
مرة أخرى ، أعاد التكرار مكررًا باستخدام
طريقة __iter __ () هذه.
لذا يمكنك القيام بذلك من المكرر
نفسه أيضًا ، نظرًا لأن self دائمًا مكرر ، لأن
self هي الكائن الذي يحتوي على طريقة dunder __next __ ().
لذلك ذكرت سابقًا في الدورة
شيئًا عن حلقات for وكيف احتجنا إلى كائن
تم تعريفه dunder __len __ () و dunder __getitem __ ().
إذن ما هذا؟
دعنا نحدد مادة أخرى
قابلة للتكرار ، وسيكون لها __len
__ () ، len (self. سيارات) ، وسأقوم بتهيئة السيارات هنا.
لنفترض أن لدينا الذات. السيارات تساوي
هذه القائمة المكونة من عنصرين ، ثم نقوم بتعريف طريقة dunder
__len __ () ، والتي تُرجع طول القائمة ،
ونقوم أيضًا بتعريف طريقة __getitem __ () التي تأخذ في
الفهرس الذي نريد استرداده ، وإرجاع فقط
الذات. سيارات [i].
في وقت سابق من الدورة ، نظرنا إلى هذا وقلت أنه عندما يكون
لديك كائن يشبه هذا يحتوي على
طريقة __len __ () و __getitem __ () ، يمكنك استخدام
حلقة for عليه.
وبالفعل ، إذا استخدمنا السيارة في AnotherIterable
() ، فسترى أن هذا يطبع السيارات ، Fiesta و Focus.
فهل هذا متكرر أيضًا؟
ليس لديها طريقة __iter __ ().
لا يعيد أي مولد.
والجواب هو نعم.
في Python ، يمكنك تحديد العناصر التكرارية الخاصة بك إما
بطريقة __iter __ () التي تُرجع عنصرًا متكررًا
، أو يمكنك الحصول على كائن له طول و getitem.
كلاهما متكرّران ويمكنك استخدام حلقات for ، ويمكنك استخدام __sum
__ () ، ويمكنك استخدام __len __ () فيها ...
آسف ، ليس __len __ () ، يمكنك استخدام __list __ () فيها.
إذن كلا الأمرين متكررين.
الان اتفقنا؟
والآن تعلمنا القليل عن العناصر
التكرارية ، وكيف تختلف عن المتكررين
، لكنها عادةً ما تكون معًا ، جنبًا إلى جنب.
يتم استخدام المكرر للحصول على القيمة التالية ،
ويتم استخدام التكرار لتجاوز جميع
قيم المكرر.
لذا يتيح لك نوع مكرر الانتقال خطوة بخطوة ،
في حالة رغبتك في القيام بذلك ، عن طريق استدعاء
__next __ () ، ويتيح لك التكرار الانتقال إلى جميع العناصر.
هذا كل شيء لهذا الفيديو.
إذا لم يكن الأمر منطقيًا وكنت تتساءل ، "حسنًا
، لماذا بحق الجحيم سأحتاج هذا؟ " لا تقلق.
في غضون أقسام قليلة ، ستقول
، "يا إلهي ، هذا منطقي للغاية ،" عندما نتعلم
عن لغة بايثون غير المتزامنة.
فقط اعطيكم بعض التلميحات هنا
وأيضًا ، عندما تريد استخدام قائمة أطول قليلاً
أو استعراضها ، يمكنك استخدام المولدات للقيام بذلك.
الآن دعني أقول أيضًا ، الآن بعد أن وصلنا
إلى هنا ، بدلاً من الحصول على my_numbers =
[x for x في [1 ، 2 ، 3 ، 4 ، 5]] على
سبيل المثال ، هذه قائمة فهم.
my_numbers_gen () ، يمكنك القيام بفهم المولد.
هذا المثال ليس مفيدًا جدًا ، ولكنه
الآن كائن منشئ أيضًا.
وهو مجرد اختصار للتكرار عبر تسلسل.
يمكنك القيام بذلك بعد ذلك (my_numbers_gen).
يمكنك طباعته.
لذا فإن فهم المولد ، شيء شائع جدًا
للقيام به أيضًا ، ولا هو الشيء المطبوع هناك.
لذا أردت فقط أن أذكر ذلك.
هذا ليس فهم المجموعة
؛ هذا هو فهم المولد.
ويمكننا استخدامه لإنشاء كائن مولد سريعًا ، يتيح
لنا استدعاء __next __ () في هذه الصيغة أيضًا.
مرة أخرى ، كل ما يفعله هو مراجعة هذه
القائمة وإعطاء كل رقم كما تسميه __next __ ().
لذلك لا ينسخ القائمة بأكملها ، وهذا ما يفعله.
هذا ينسخ القائمة ويعطيك نسخة أخرى.
هذا يتيح لك تجاوزها واحدًا تلو
الآخر دون نسخ القائمة بأكملها.
بالطبع هذا المثال ليس جيدًا جدًا.
يمكنك فقط تكرار هذه القائمة
نظرًا لأنك حصلت عليها بالفعل ، ولكن يمكن
أن تكون مفيدة في حالات أخرى مثل عندما
تقوم بالتكرار على مولد آخر وتريد إجراء
بعض التغييرات عليه أثناء التنقل.
لذلك يمكن أن يكون مفيدًا في الحالات القادمة.
سنواجه المزيد من الأمثلة على هذا لاحقًا.
أردت فقط أن أقدم لكم القليل من التركيب اللغوي.
على أي حال ، هذا كل شيء لهذا الفيديو.
لا أريد أن أبقيك أكثر من ذلك.
سأراكم في اليوم التالي.