9.9. المولدات #
المولدات أداة بسيطة وفعالة لإنشاء المُكررات. تُكتب مثل الدوال العادية، ولكنها تستخدم عبارة yield كلما أرادت إرجاع البيانات. في كل مرة تُستدعى فيها الدالة next() عليها، يستأنف المولد العمل من حيث توقف (يتذكر جميع قيم البيانات والعبارة التي تم تنفيذها آخر مرة). يوضح المثال التالي سهولة إنشاء المولدات:
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
>>> for char in reverse('golf'):
... print(char)
…
f
l
o
g
أي شيء يمكن تنفيذه باستخدام المولدات يمكن تنفيذه أيضًا باستخدام المُكررات القائمة على الفئات، كما هو موضح في القسم السابق. ما يجعل المولدات مُدمجة للغاية هو أن دالتي __iter__() و __next__() تُنشأان تلقائيًا.
ميزة رئيسية أخرى هي حفظ المتغيرات المحلية وحالة التنفيذ تلقائيًا بين الاستدعاءات. جعل هذا الدالة أسهل في الكتابة وأكثر وضوحًا من النهج الذي يستخدم متغيرات المثيل مثل self.index و self.data.
بالإضافة إلى إنشاء الدالة تلقائيًا وحفظ حالة البرنامج، عند انتهاء المولدات، فإنها تُفعّل تلقائيًا أمر StopIteration. تُسهّل هذه الميزات مجتمعةً إنشاء المُكرّرات دون عناء يُذكر مقارنةً بكتابة دالة عادية.