اهلا ومرحبا بكم في مدونه : Cyber1101 انظم للمجتمع

Iterator Python

 




مفهوم الـ Iterator في بايثون


Iterator في Python هو أي شيء يسمح لنا بالتكرار على عناصر مجموعة من البيانات (collection)، وبشكل تتابعي وفي نفس الوقت يمكن استخدامه في حلقة التكرار (loop) للتعامل مع العناصر الموجودة في المجموعة.

بمعنى آخر، Iterator هو عبارة عن كائن يُمثل مجموعة من البيانات، ويمكن استخدامه للحصول على العناصر الفردية في المجموعة بشكل تتابعي. وبإمكانك استخدام Iterator في حلقة التكرار for loop، باستخدام دالة next() للوصول إلى العناصر الفردية في المجموعة.

يمكن إنشاء Iterator في Python باستخدام دالة iter() وعادةً ما يتم تنفيذ Iterator لتناسب مجموعات مختلفة مثل القوائم (lists) والمجموعات (sets).

الفرق بين الـ Iterator  و الـ  Iterable 


في بايثون، الـ Iterator والـ Iterable هما مفاهيم مختلفة.

  • - Iterable:
هو أي شيء يمكن تكراره (iterable)، بمعنى آخر، هو أي كائن يحتوي على دالة __iter__() المناسبة، حيث تُستخدم هذه الدالة لإرجاع iterator للتكرار على العناصر داخل الكائن.


  • - Iterator:
هو كائن يستخدم لتمثيل تكرار محدد، ويتم إنشاؤه باستخدام الدالة __next__() التي تقوم بإرجاع العنصر التالي في التكرار. وعادة ما يتم تمثيل Iterator عن طريق كائن iterable.


بمعنى آخر، فإن Iterable هو الكائن الذي يمكن التكرار عليه، بينما Iterator هو الكائن الذي يتحكم في عملية التكرار بناء على الـ iterable.

لتوضيح الأمر، يمكن استخدام دالة iter() في بايثون للحصول على Iterator من Iterable، مثلاً: 



my_list = [1, 2, 3]
my_iter = iter(my_list)



هنا، يتم إنشاء Iterator my_iter من Iterable my_list . يمكن استخدام الـ Iterator للتكرار على قائمة my_list باستخدام دالة next() :



print(next(my_iter)) # output: 1
print(next(my_iter)) # output: 2
print(next(my_iter)) # output: 3



بعد ذلك، سيتم رفع StopIteration عندما يتم الوصول إلى نهاية الـ Iterable ولا يمكن استرجاع مزيد من القيم.

التعامل مع الـ Iterator 


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

للاستفادة من Iterator في Python، يجب تنفيذ ثلاث وظائف رئيسية:

  •  استدعاء الدالة iter() على المجموعة التي تريد التفريغ عناصرها.
  •  استخدام دالة next() للحصول على القيمة التالية في التسلسل.
  • حل أي استثناء StopIteration يحدث عندما تصل إلى نهاية التسلسل.

هذا هو مثال بسيط يوضح كيفية استخدام iterator في Python باستخدام قائمة:


# بدء تعريف القائمة
my_list = [4, 7, 0, 3]
# استدعاء دالة iter() على القائمة
my_iter = iter(my_list)
# الحصول على القيمة التالية في التسلسل
print(next(my_iter)) # 4
print(next(my_iter)) # 7
# الحصول على القيمة التالية في التسلسل
print(next(my_iter)) # 0
print(next(my_iter)) # 3
# حل استثناء StopIteration بعد الانتهاء من جميع العناصر
try:
    print(next(my_iter))
except StopIteration:
    print("Reached the end of the list.")



هذا هو مثال مبسط على كيفية استخدام Iterator لإظهار كل عنصر في قائمة. يمكن استخدام نفس الأسلوب للاستفادة من Iterator مع أي نوع آخر من المجموعات في Python.

المرور على قيم الـ Iterator بواسطة الحلقة for


يمكن استخدام حلقة الـfor في لغة البرمجة Python للمرور على قيم الـ Iterator بسهولة. يمكن تحديد متغير لاستيعاب كل قيمة في دورة الحلقة، كما يلي:


my_iterable = [1, 2, 3]
for item in my_iterable:
    print(item)



في هذا المثال، تم إنشاء قائمة my_iterable بقيم [1، 2، 3] . ثم يتم استخدام حلقة الـ for لتمرير كل قيمة من القائمة my_iterable إلى المتغير item وطباعة هذه القيمة باستخدام الأمر print() . وبالتالي، سيتم طباعة القيم التالية:



1
2
3



يرجى ملاحظة أنه يمكن استخدام الـ Iterator بدلاً من القائمة مباشرة في الحلقة for ، مثل:



my_iterator = iter([1, 2, 3])
for item in my_iterator:
    print(item)



وسيؤدي ذلك إلى نفس النتيجة المطلوبة.

امثلة حول إنشاء Iterator


يمكننا إعطاء مثال حول إنشاء Iterator لقائمة بأرقام عشوائية. الهدف هو تمكين استخدام القائمة في حلقة for-in .


في هذا المثال، سنستخدم لغة Python:


import random
class RandomNumbers:
    def __init__(self, length):
        self.length = length
        self.numbers = [random.randint(0, 100) for _ in range(length)]
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.index >= self.length:
            raise StopIteration()
        else:
            result = self.numbers[self.index]
            self.index += 1
            return result



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


تتضمن الفئة دالتين، __iter__() و __next__() ، وهما المطلوبان لإنشاء Iterator . تقوم __iter__() بإرجاع self ، بينما يتم استخدام __next__() لإرجاع العناصر الفردية في القائمة. تتبع متغير فهرس self.index نقطة التشغيل الحالية في القائمة، مع زيادته بمقدار واحد بعد كل عنصر.


يمكن استخدام هذا المثال على النحو التالي:


random_numbers = RandomNumbers(5)
for number in random_numbers:
    print(number)



ستعرض هذه الحلقة الأرقام الخمس العشوائية في القائمة التي تم إنشاؤها بواسطة فئة RandomNumbers .

إرسال تعليق

Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.