المولدات هي نوع خاص من الوظائف التي تسمح لك بإرجاع القيم دون إنهاء وظيفة. يفعل هذا عن طريق استخدام الكلمة الرئيسية `yield` . على غرار `return` ، و `yield` سوف التعبير بإرجاع قيمة إلى المتصل. والفرق الرئيسي بين الاثنين هو أن `yield` سيعلق الوظيفة ، مما يسمح بإعادة المزيد من القيم في المستقبل.
المولدات قابلة للتكرار حتى يمكن استخدامها بشكل نظيف مع الحلقات أو أي شيء آخر يتكرر.
مثل المكررات الأخرى ، يمكن تمرير المولدات إلى الوظيفة `next` لاسترداد العنصر التالي. عندما لا يحتوي المولّد على قيم أكثر `StopIteration` ، `StopIteration` خطأ `StopIteration` .
تعد المولدات مفيدة بشكل خاص عندما تحتاج إلى إنشاء مجموعة كبيرة من القيم ولكن لا تحتاج إلى الاحتفاظ بها كلها في الذاكرة في نفس الوقت. على سبيل المثال ، إذا كنت بحاجة إلى طباعة أول مليون مليون فيبوناتشي ، فيجب عليك عادة إرجاع قائمة بقيمة مليون وتكرارها على القائمة لطباعة كل قيمة. ومع ذلك ، مع مولد ، يمكنك إرجاع كل قيمة واحدة في كل مرة: