أوه ، لا أستطيع رؤيتك.
لكني أعرف ما تشعر به.
أنت تشك بي الآن.
أنت تعتقد أن المولدات عديمة الفائدة.
أنت تستمر في القول إنهم سريعون ومؤدون ، لكنني لا أفهم ذلك حقًا.
هذه الكلمة L وهذا التالي.
وبصراحة ، هذا عادل.
إنه فقط لا معنى له.
دعني أقنعك بقوتهم الحقيقية.
سأقوم بتحديد كل هذه الأشياء وحذفها فقط ، لأنني أريد أن أعود إلى مثال استخدمناه
من قبل.
تذكر عندما أنشأنا أداء الديكور؟
في قسمنا المزين.
باستخدام هذا الديكور الأداء.
دعونا نقلصها.
على أن.
وظائف بالنسبة لنا هي وظيفة زمنية طويلة تستخدم نطاقًا.
ووظيفة أخرى طويلة الأمد تستخدم نطاقًا ثم تحوله إلى قائمة.
لذلك تذكر ، يقوم المرء بإنشاء قائمة.
ثم من تلك القائمة التي تم إنشاؤها في الذاكرة على أجهزة الكمبيوتر الخاصة بنا ،
ستذهب واحدًا تلو الآخر وتضرب الأشياء بخمسة مقابل النطاق ، وهو مولد يأتي مدمجًا في بايثون والذي
سيكون واحدًا تلو الآخر يحتفظ بصفر والذاكرة واضرب في خمسة ، احتفظ بذاكرة واحدة ، ولكن اضرب في خمسة ،
واستمر ، واستمر ، واستمر في إزالة أي أرقام قديمة من الذاكرة.
ماذا سيكون أداء كلاهما في رأيك؟
دعونا نختبرها.
وبالمناسبة ، سوف أقوم بربط التمرين حتى تتمكن من اختباره بنفسك واللعب.
لذلك دعونا نفعل وقتا طويلا.
وبعد ذلك وقت طويل ل.
ضع رهانك.
إستعد.
هيا نكتشف.
استغرقت الوظيفة الأولى وقتًا طويلاً 1. 6 ثواني.
ثم استغرقت الوظيفة الثانية ضعف الوقت تقريبًا.
هذا فرق كبير ، أليس كذلك؟
لكن على الفور يمكننا أن نقول.
حسنا.
هذا بالتأكيد أكثر أداءً من وقت طويل أيضًا.
دعونا نجريها مرة أخرى فقط لاختبار افتراضاتنا.
تأكد من صحتها.
هذه المرة استغرق الأمر 1. 8 ثم 2. 6.
حسنا.
هذا أسرع بكثير ، على الرغم من أن كلاهما يفعل نفس الشيء.
وفكر في هذا.
إذا كنت تستخدم Google ، ففكر في مقدار البيانات التي يمتلكها Google.
إذا كنت تعمل في Google وتخيل ما إذا كان هذا أكبر ، إذا كان ذلك أطول ،
إذا كان بإمكانك أداء مهمة بشكل أسرع.
استخدم موارد أقل بكثير مما تمتلكه Google.
أعني أنهم سيحبونك لأنه مع المولدات ، نحن قادرون على عدم الاحتفاظ بالأشياء في الذاكرة
، ولا يتعين علينا استهلاك كل تلك الموارد ومعالجة البيانات بكفاءة بدلاً من ذلك.
وانظر هنا.
تمكنت من حل هذه الوظيفة في 16 ثانية.
أعني ، نعم ، لقد استغرق ذلك وقتًا طويلاً ، لكن وقتًا طويلاً قد يجعله في الواقع يقتل العملية.
إذا كان هذا خادم Google ، فهذا خادم مات للتو ولا فائدة منه تمامًا.
لذا فإن المولدات مفيدة حقًا عند حساب مجموعات كبيرة من البيانات ، خاصةً إذا كنا نستخدم حلقات طويلة
حيث لا نريد حقًا تخزين تلك الذاكرة ولسنا بحاجة إلى حساب كل شيء في نفس الوقت ، ربما واحدة
تلو الأخرى واحد.
والكثير من المكتبات في بايثون تحت غطاء المحرك تستخدم المولدات بدلاً من استخدام القوائم لأنها
أسرع بكثير.
لذا تذكر إنشاء مولد.
كل ما علينا فعله هو إنشاء وظيفة مولد نريدها.
وبعد ذلك هنا ، يمكننا ببساطة أن نحلل بعض القيم.
ربما نعطيها إلى نطاق أو يمكننا فقط قبول معلمة لنا.
وكل ما علينا فعله هو ببساطة.
أَثْمَر.
تلك النتيجة.
ونفعل ما نريد في هذه الكتلة.
ولكن تأكد من إيقاف الوظيفة مؤقتًا بحيث يمكن استخدامها لاحقًا.
كوظيفة مولد لذلك يمكننا القيام بشيء مثل حلقة for ونقول عنصرًا في الوظيفة العامة ومنحها نوعًا
من المعلمة.