0 Mustafa Suleiman نشر 25 أبريل أرسل تقرير نشر 25 أبريل أي كائن نستطيع التكرار عليه من خلال حلقة for أو تمريره إلى دالة iter() للحصول على Iterator أي مكرر، فهو كائن قابل للتكرار Iterable بمعنى يحتوي على عناصر يمكن الوصول إليها واحدًا تلو الآخر بسبب الدالة الداخلية __iter__() التي تُعيد كائن Iterator كالتالي: my_list = [1, 2, 3] for item in my_list: print(item) أما Iterator وهو المُكرّر فذلك لتتبع عملية التكرار وإرجاع العناصر واحدًا تلو الآخر، ويتم إنشاؤه من Iterable أي كائن قابل للتكرار باستخدام دالة iter() ويحتوي على دالتين داخليتين وليس دالة واحدة كما في Iterable، وهما: __iter__() تُعيد الكائن نفسه. __next__() تُعيد العنصر التالي في التسلسل، وإن لم يتوفر عناصر، تُطلق استثناء. والكائنات من نوع Iterator تُستهلك، أي بمجرد استنفاد العناصر، لا تستطيع إعادة استخدامها إلا بإنشاء Iterator جديد. my_list = [1, 2, 3] iterator = iter(my_list) print(next(iterator)) print(next(iterator)) print(next(iterator)) #print(next(iterator)) قم بتجربة الكود السابق وستحصل على عناصر المصفوفة، ولو أزلت تعليق السطر الأخير ستحصل على خطأ StopIteration: StopIteration حيث لم يعد هناك عناصر باقية في المُكرر. بالتالي كل Iterator هو Iterable لأنه يحتوي على __iter__() وليس كل Iterable هو Iterator لأنه لا يحتوي على __next__() دائمًا. وتستطيع تحويل Iterable إلى Iterator باستخدام iter()، واستخدام next() للوصول إلى العناصر يدويًا. my_string = "hello" #ذلك كائن قابل للتكرار iterator = iter(my_string) # Iterator مكرر print(next(iterator)) print(next(iterator)) # لطباعة العناصر الباقية في المكرر for char in iterator: print(char) 1 اقتباس
0 بلال زيادة نشر 26 أبريل أرسل تقرير نشر 26 أبريل Iterable و Iterator هما مفهومان مرتبطان بالتكرار (iteration)، لكنهما يختلفان في التعريف والاستخدام. إليك الفرق باختصار Iterable (قابل للتكرار) أي كائن يمكن التكرار عليه باستخدام حلقة (مثل for) أو يمكن تمريره إلى دالة مثل iter() للحصول على Iterator. الخصائص يحتوي على الدالة السحرية __iter__() التي تُرجع كائن Iterator. أمثلة: القوائم (list)، المجموعات (set)، السلاسل (str)، القواميس (dict)، وغيرها. لا يحتفظ بحالة التكرار بنفسه. ومثال على ذلك my_list = [1, 2, 3] for item in my_list: # my_list هو Iterable print(item) Iterator (مُكرّر) كائن يمثل تيارًا من البيانات ويتيح استرجاع العناصر واحدًا تلو الآخر باستخدام الدالة next(). الخصائص يحتوي على دالتين سحريتين: __iter__() (تُرجع نفس الكائن) و __next__() (تُرجع العنصر التالي أو تُطلق استثناء StopIteration إذا انتهت البيانات). يحتفظ بحالة التكرار (أي يتذكر أين وصل في التكرار). يتم إنشاؤه عادةً من Iterable باستخدام iter(). ومثال على ذلك my_list = [1, 2, 3] iterator = iter(my_list) # تحويل Iterable إلى Iterator print(next(iterator)) # 1 print(next(iterator)) # 2 print(next(iterator)) # 3 # print(next(iterator)) # سيُطلق استثناء StopIteration 1 اقتباس
0 عبدالباسط ابراهيم نشر 27 أبريل أرسل تقرير نشر 27 أبريل لتوضيح ال Iterator (المكرر) أكثر فنعتبر Iterator هو كائن يستخدم للتكرار على عناصر Iterable وخصائصه أنه يحتوي على دالة __iter__() التي تُرجع Iterator نفسه يحتوي على دالة__next__() التي تُرجع العنصر التالي في التكرار عندما لا تبقى عناصر، يرفع استثناء StopIteration ولذلك ال Iterable كائن يمكن تكرار عناصره (يمكن استخدامه في حلقة for) بينما ال Iterator كائن يدير حالة التكرار ويعطي العناصر واحداً تلو الآخر عندما تستخدم حلقة for مع Iterable، تقوم بايثون تلقائياً بتحويله إلى Iterator واستخدامه داخلياً للتكرار. اقتباس
السؤال
Yahya Hammam
Iterator vs Iterable في لغة بايثون ؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.