الفرق بين المراجعتين لصفحة: «Python/iter»

من موسوعة حسوب
إضافة الصّفحة
 
لا ملخص تعديل
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 9: سطر 9:
== المعاملات ==
== المعاملات ==
=== <code>object</code> ===
=== <code>object</code> ===
إن لم يكن المُعامل الثّاني <code>sentinel</code> حاضرًا، فلا بدّ لهذا المُعامل أن يكون كائنًا يدعم بروتوكول التّكرار (أي أنّ صنفه يُعرّف التّابع الخاصّ <code>‎_‎_‎iter‎_‎_‎(‎)‎</code>)، أو يجب أن يدعم بروتوكول التّسلسلات (sequence protocol) الذي يُعرّف صنفه التّابع الخاصّ <code>‎_‎_‎getitem‎_‎_‎(‎)‎</code> مع مُعاملات تكون أعدادًا صحيحةً وتبدأ من الصّفر. وإن لم يدعم الكائن أيًّا من هاذين البروتوكولات، فسيُطلق الاستثناء [[Python/TypeError|TypeError]].
إن لم يكن المُعامل الثّاني <code>sentinel</code> حاضرًا، فلا بدّ لهذا المُعامل أن يكون كائنًا يدعم بروتوكول التّكرار (أي أنّ صنفه يُعرّف التّابع الخاصّ <code>‎_‎_‎iter‎_‎_‎(‎)‎</code>)، أو يجب أن يدعم بروتوكول التّسلسلات (sequence protocol) الذي يُعرّف صنفه التّابع الخاصّ <code>‎_‎_‎getitem‎_‎_‎(‎)‎</code> مع مُعاملات تكون أعدادًا صحيحةً وتبدأ من الصّفر. وإن لم يدعم الكائن أيًّا من هذين البروتوكولين، فسيُطلق الاستثناء <code>[[Python/built-in exceptions#TypeError|TypeError]]</code>.


=== <code>sentinel</code> ===
=== <code>sentinel</code> ===
سطر 15: سطر 15:


إن مُرّرت قيمة لهذا المُعامل، فلا بدّ على المُعامل <code>object</code> أن يكون كائنًا قابلًا للاستدعاء (كدالّة أو تابع مثلًا).
إن مُرّرت قيمة لهذا المُعامل، فلا بدّ على المُعامل <code>object</code> أن يكون كائنًا قابلًا للاستدعاء (كدالّة أو تابع مثلًا).
يستدعي المُكرّر المُنشأ في هذه الحالة الكائن <code>object</code> دون مُعاملات لكلّ استدعاءٍ لتابعه الخاصّ <code>‎_‎_‎next‎_‎_‎(‎)‎</code> وإن كانت القيمة المُعادة مُساويّة لقيمة المُعامل <code>sentinel</code> فسيُطلَق استثناء<code>StopIteration</code> الذي يوقف التّكرار، وفي غير ذلك، ستُعاد القيمة التي يُعيدها استدعاء الكائن <code>object</code>.
 
يستدعي المُكرّر المُنشأ في هذه الحالة الكائن <code>object</code> دون مُعاملات لكلّ استدعاءٍ لتابعه الخاصّ <code>‎_‎_‎next‎_‎_‎(‎)‎</code> وإن كانت القيمة المُعادة مُساويّة لقيمة المُعامل <code>sentinel</code> فسيُطلَق استثناء <code>[[Python/built-in exceptions#StopIteration|StopIteration]]</code> الذي يوقف التّكرار، وفي غير ذلك، ستُعاد القيمة.


== القيمة المعادة ==
== القيمة المعادة ==
سطر 60: سطر 61:


== انظر أيضًا ==
== انظر أيضًا ==
* [[Python/TypeError|TypeError]].
* [[Python/StopIteration|StopIteration]].
* [[Python/iterators|المكرِّرات Iterators في بايثون]].
* [[Python/iterators|المكرِّرات Iterators في بايثون]].



المراجعة الحالية بتاريخ 12:56، 22 مايو 2018

تعيد الدّالة iter()‎ مُكرّرًا حسب المُعاملات المُعطاة.

البنية العامة

iter(object[, sentinel])

المعاملات

object

إن لم يكن المُعامل الثّاني sentinel حاضرًا، فلا بدّ لهذا المُعامل أن يكون كائنًا يدعم بروتوكول التّكرار (أي أنّ صنفه يُعرّف التّابع الخاصّ ‎_‎_‎iter‎_‎_‎(‎)‎)، أو يجب أن يدعم بروتوكول التّسلسلات (sequence protocol) الذي يُعرّف صنفه التّابع الخاصّ ‎_‎_‎getitem‎_‎_‎(‎)‎ مع مُعاملات تكون أعدادًا صحيحةً وتبدأ من الصّفر. وإن لم يدعم الكائن أيًّا من هذين البروتوكولين، فسيُطلق الاستثناء TypeError.

sentinel

مُعامل اختيّاريّ.

إن مُرّرت قيمة لهذا المُعامل، فلا بدّ على المُعامل object أن يكون كائنًا قابلًا للاستدعاء (كدالّة أو تابع مثلًا).

يستدعي المُكرّر المُنشأ في هذه الحالة الكائن object دون مُعاملات لكلّ استدعاءٍ لتابعه الخاصّ ‎_‎_‎next‎_‎_‎(‎)‎ وإن كانت القيمة المُعادة مُساويّة لقيمة المُعامل sentinel فسيُطلَق استثناء StopIteration الذي يوقف التّكرار، وفي غير ذلك، ستُعاد القيمة.

القيمة المعادة

مُكرّر يعمل حسب نوع المُعاملات المُعطاة.

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة عند تمرير قيم قابلة للتكرار إلى المُعامل object:

>>> abcd = iter('abcd') # تحويل سلسلة نصيّة إلى مُكرّر
>>> for i in abcd:
...     print(i)
... 
a
b
c
d
>>> abcd # كائن مكرّر
<str_iterator object at 0x7f992a45c080>

>>> chars = ['a', 'b', 'c'] # قائمة بايثون عاديّة
>>> next(chars) # لا يُمكننا استخدام الدّالة
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not an iterator
>>> chars = iter(chars) # تحويل القائمة إلى مكرّر
>>> next(chars)
'a'
>>> next(chars)
'b'
>>> next(chars)
'c'
>>> next(chars) # انتهت قيم المُكرّر لذا لا يُمكننا الاستمرار
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

المثال التّالي يُوضّح كيفيّة الاستفادة من المُعامل sentinel، وذلك عبر قراءة أسطرٍ من ملفّ إلى أن نصل إلى سطرٍ فارغ:

with open('mydata.txt') as fp:
    for line in iter(fp.readline, ''):
        process_line(line)

انظر أيضًا

مصادر