الكورس

Advertisements

Python Iterable VS Iterator


💡 Iterable هو كائن ، يمكن التكرار عليه، يقوم بإنشاء Iterator عند تمريره إلى method الـ ()iter.

💡 Iterator هو كائن يُستخدم للتكرار عبر كائن قابل للتكرار باستخدام method الـ () __next __ ().

Iterator: له method الـ __next __ () ، والتي تُرجع العنصر التالي من الكائن.

لاحظ أن كل iterator هو Iterable، ولكن ليس كل Iterable هو iterator، على سبيل المثال القائمة قابلة للتكرار ولكن القائمة ليست iterator.

يمكن إنشاء iterator من Iterable باستخدام method الـ ()iter لجعل هذا ممكنًا، تحتاج class الكائن إما إلى method الـ __iter__ ، والتي تُرجع iterator،

أو method  الـ __getitem__ مع indexes متسلسلة تبدأ بـ [ 0 ].

 

مثال للتوضيح:

# list of numbers
numbers = ["one", "two", "three", "four"]
for number in numbers: 
    print(number) 

langs   = ("Python", "PHP", "javascript")
for lang in langs: 
    print(lang) 
  
str = "Python very easy"    
for char in str: 
    print(char, end = " ") 

output:

one
two
three
four

Python
PHP
javascript

P y t h o n   v e r y   e a s y

عندما يتم تنفيذ حلقة for ، تستدعي ()iter على الكائن ، والتي من المفترض أن تتكرر. إذا نجحت هذه الإستدعاء، فسوف تُرجع استدعاء iter كائن iterator يعرّف method الـ () __next __ ، الذي يصل إلى عناصر الكائن واحدًا تلو الآخر.

ستثير method الـ ()__next __ استثناء StopIteration ، إذا لم يكن هناك المزيد من العناصر المتاحة. ستنتهي الحلقة for بمجرد اكتشاف استثناء StopIteration.

 

مثال للتوضيح:

# list of numbers
numbers = ["one", "two", "three", "four"]

# initialize the object 
iter_obj = iter(numbers) 

print(next(iter_obj))
print(next(iter_obj))
print(next(iter_obj))
print(next(iter_obj))

output:

one
two
three
four

💡 ملاحظة: إذا تم استدعاء “(next (iter_obj” مرة أخرى ، فسيتم إرجاع “StopIteration“.

 

👇Check object is iterable or not

def iterable(obj): 
   try: 
     iter(obj) 
     return True
              
   except TypeError: 
     return False
         
for element in [34, [4, 5], (4, 5), {"a":4}, "dfsdf", 4.5]:              
  print(element, " is iterable : ", iterable(element)) 

output:

34  is iterable :  False
[4, 5]  is iterable :  True
(4, 5)  is iterable :  True
{'a': 4}  is iterable :  True
dfsdf  is iterable :  True
4.5  is iterable :  False

 

💡 الزتونة

 

  1. Iterable هو كائن ، يمكن التكرار عليه، يقوم بإنشاء Iterator عند تمريره إلى method الـ ()iter.
  2. Iterator هو كائن يُستخدم للتكرار عبر كائن قابل للتكرار باستخدام method الـ () __next __ ().
  3. لاحظ أن كل iterator هو Iterable، ولكن ليس كل Iterable هو iterator، على سبيل المثال القائمة قابلة للتكرار ولكن القائمة ليست iterator.

 



الإبلاغ عن خطأ

×

إذا وجد خطأ وتريد الإبلاغ عن هذا الخطأ، أو إذا كنت تريد تقديم اقتراح على شىء معين، فلا تتردد في إرسال بريد إلكتروني إلينا:

[email protected]

شكرًا لك على مساعدتك لنا!

Advertisements