ما هي المولدات في بايثون وكيفية استخدامها؟



تعرف على ما هي المولدات في Python جنبًا إلى جنب مع المزايا. تعرف أيضًا على كيفية إنشائها واستخدامها جنبًا إلى جنب مع حالات الاستخدام المختلفة.

يعتبر إنشاء العناصر المكررة أو العناصر التي تسمح بالتخطي فوقها مهمة مرهقة. ولكن في ، فإن تنفيذ هذه المهمة المؤلمة يصبح سلسًا حقًا. لذلك دعونا نمضي قدمًا ونلقي نظرة فاحصة على المولدات في بايثون.

فيما يلي قائمة بجميع الموضوعات التي تم تناولها في هذا المقال:





فلنبدأ. :)

ما هي المولدات في بايثون؟

المولدات هي في الأساس وظائف تقوم بإرجاع أشياء أو عناصر يمكن عبورها. هذه الوظائف لا تنتج جميع العناصر دفعة واحدة ، بل تنتجها واحدة تلو الأخرى وعند الحاجة فقط. كلما كان تم تضمينه للتكرار على مجموعة من العناصر ، يتم تشغيل وظيفة المولد. للمولدات عدد من المزايا أيضًا.



مزايا استخدام المولدات

  • بدون المولدات في بايثون ، فإن إنتاج العناصر التكرارية أمر صعب للغاية وطويل.

  • المولدات سهلة التنفيذ لأنها تنفذ تلقائيًا __iter __ () و __next __ () و StopIteration والتي بخلاف ذلك ، تحتاج إلى تحديد صريح.



  • يتم حفظ الذاكرة حيث يتم إنتاج العناصر عند الحاجة ، على عكس المعتاد . تصبح هذه الحقيقة مهمة للغاية عندما تحتاج إلى إنشاء عدد كبير من التكرارات. يعتبر هذا أيضًا أكبر ميزة للمولدات.

  • يمكن استخدامها لإنتاج عدد لا حصر له من العناصر.

  • يمكن استخدامها أيضًا لتوجيه عدد من العمليات

الوظائف العادية مقابل وظائف المولد:

يتم إنشاء المولدات في Python تمامًا بالطريقة التي تنشئها باستخدام الكلمة الرئيسية 'def'. ولكن ، تستخدم وظائف المولد الكلمة الأساسية للإنتاجية بدلاً من العودة. يتم ذلك لإخطار المترجم بأن هذا مكرر. ليس هذا فقط ، يتم تشغيل وظائف المولد عند استدعاء الوظيفة التالية وليس باسمها كما في حالة الوظائف العادية. ضع في اعتبارك المثال التالي لفهمه بشكل أفضل:

مثال:

def func (a): ينتج a = [1،2،3] b = func (a) next (b)

انتاج: [1، 2، 3]

كما ترى ، في الإخراج أعلاه ، تستخدم الدالة func () الكلمة الأساسية للإنتاجية والوظيفة التالية لتنفيذه. ولكن ، بالنسبة للوظيفة العادية ، ستحتاج إلى الجزء التالي من الكود:

مثال:

def func (a): إرجاع a = [1،2،3] func (a)

انتاج: [1، 2، 3]

إذا نظرت إلى المثال أعلاه ، فقد تتساءل عن سبب استخدام وظيفة مولد عندما تقوم الوظيفة العادية أيضًا بإرجاع نفس الإخراج. لذلك دعونا ننتقل ونرى كيفية استخدام المولدات في بايثون.

باستخدام وظائف المولد:

كما ذكرنا سابقًا ، تنتج المولدات في Python متكررات واحدة تلو الأخرى. ألق نظرة على المثال التالي:

مثال:

def myfunc (a): while a> = 3: ينتج a a = a + 1 b = myfunc (a) print (b) next (b)

عند تنفيذ الوظيفة التالية ، سترى الناتج التالي:

انتاج: 4

هنا ، تم إرجاع كائن واحد قابل للتكرار مستوفياً شرط while. بعد التنفيذ ، يتم نقل التحكم إلى المتصل. في حالة الحاجة إلى المزيد من العناصر ، يجب تنفيذ نفس الوظيفة مرة أخرى عن طريق استدعاء الوظيفة التالية ().

التالي (ب)

انتاج: 5

في عمليات التنفيذ الإضافية ، ستعيد الوظيفة 6،7 ، إلخ. تقوم وظائف المولد في Python بتنفيذ أساليب __iter __ () و __next __ () تلقائيًا. لذلك ، يمكنك التكرار فوق الكائنات فقط باستخدام الطريقة التالية (). عندما يجب إنهاء إنشاء العنصر ، تقوم وظائف المولد بتنفيذ StopIteration داخليًا دون الحاجة إلى قلق المتصل. هنا مثال آخر على ذلك:

مثال:

a = 2 def myfunc (a): بينما a> = 0: ينتج a a - = 1 b = myfunc (a) print (b) next (b)

انتاج:

StopIteration-Generators في Python-Edurekaتوضح الصورة أعلاه تنفيذ برنامجنا المطلوب عدد المرات. إذا حاولت استدعاء الوظيفة التالية مرة أخرى ، فإنها ترجع رسالة تصور StopIteration وقد تم تنفيذ. إذا حاولت القيام بذلك مع الوظائف العادية ، فلن تتغير القيم التي تم إرجاعها أو تتكرر. ألق نظرة على المثال أدناه:

مثال:

def z (): n = 1 العائد n n = n + 3 العائد n p = z () التالي (p)

انتاج:

فرق بين النهائي والنهائي

المولدات ذات الحلقات:

في حالة رغبتك في تنفيذ نفس الوظيفة مرة واحدة ، يمكنك الاستفادة من حلقة 'for'. تساعد هذه الحلقة في التكرار على الكائنات وبعد كل عمليات التنفيذ تقوم بتنفيذ StopIteration.

مثال:

def z (): n = 1 العائد n n = n + 3 العائد n لـ x في z (): print (x)

انتاج:

واحد
4

يمكنك أيضًا تحديد التعبيرات لإنشاء كائنات قابلة للتكرار.

تعبيرات المولد:

يمكنك أيضًا استخدام التعبيرات جنبًا إلى جنب مع حلقة for لإنتاج التكرارات. هذا عادة ما يجعل عملية التكرار سهلة للغاية. تعبير المولد يشبه قائمة الفهم وما شابه وظائف لامدا ، تعابير المولد تخلق وظائف مولد مجهولة.

ألق نظرة على المثال أدناه:

مثال:

a = range (6) print ('List Comprehension'، end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression'، end = ': n') c = (x + 2 for x in a) print (c) for y in c: print (y)

انتاج:

استيعاب القائمة: [2 ، 3 ، 4 ، 5 ، 6 ، 7]

تعبير المولد:

2
3
4
5
6

كما ترى ، في الإخراج أعلاه ، يكون التعبير الأول عبارة عن قائمة شاملة يتم تحديدها بين قوسين []. ينتج عن استيعاب القائمة القائمة الكاملة للعناصر دفعة واحدة. التالي هو تعبير مولد يقوم بإرجاع نفس العناصر ولكن واحدًا تلو الآخر. يتم تحديده باستخدام () الأقواس.


مولد كهرباءيمكن استخدام الوظائف ضمن وظائف أخرى أيضًا.فمثلا:

مثال:

a = range (6) print ('Generator expression'، end = ': n') c = (x + 2 for x in a) print (c) print (min (c))

انتاج:

تعبير المولد
2

ما هو مساحة الاسم c ++

يقوم البرنامج أعلاه بطباعة القيمة الدنيا عندما يتم تطبيق التعبير أعلاه على قيم أ.

استخدم حالات:

دعونا نستخدم المولدات في إلى:

  • توليد سلسلة فيبوناتشي
  • توليد الأعداد

توليد سلسلة فيبوناتشي:

سلسلة فيبوناتشي كما نعلم جميعًا هي سلسلة من الأرقام حيث يكون كل رقم عبارة عن مجموع رقمين سابقين. أول رقمين هما 0 و 1. هنا برنامج مولد لتوليد سلسلة فيبوناتشي:

مثال:

def fibo (): الأول ، الثاني = 0،1 بينما صحيح: العائد الأول ، الثاني = الثاني ، الأول + الثاني لـ x في فيبو (): إذا كانت x> 50: فاصل الطباعة (x ، النهاية = ')

انتاج:

0 1 1 2 3 5 8 13 21 34

يظهر الناتج أعلاه سلسلة فيبوناتشي بقيم أقل من 50. دعونا الآن نلقي نظرة على كيفية إنشاء قائمة من الأرقام.

توليد الأرقام:

إذا كنت ترغب في إنشاء أرقام قائمة محددة ، يمكنك القيام بذلك باستخدام وظائف المولد. ألق نظرة على المثال التالي:

مثال:

أ = المدى (10) ب = (س مقابل س في أ) طباعة (ب) ل ص في ب: طباعة (ص)

انتاج:

0
واحد
2
3
4
5
6
7
8
9

مثال:

أ = المدى (2،10،2) ب = (س من أجل س في أ) طباعة (ب) ل ص في ب: طباعة (ص)

انتاج:


2
4
6
8

أعاد البرنامج أعلاه الأرقام الزوجية من 2 إلى 10. وهذا يقودنا إلى نهاية هذه المقالة عن المولدات في بايثون. أتمنى أن تكون قد فهمت كل المواضيع.

تأكد من ممارسة أكبر قدر ممكن وإعادة تجربتك.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في مدونة 'Generators in Python' وسنعاود الاتصال بك في أقرب وقت ممكن.

للحصول على معرفة متعمقة حول Python مع تطبيقاتها المختلفة ، يمكنك التسجيل في البث المباشر مع دعم على مدار الساعة طوال أيام الأسبوع وإمكانية الوصول مدى الحياة.