الفرق بين المراجعتين ل"Python/itertools/tee"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إضافة الصّفحة)
سطر 46: سطر 46:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
ستُساعد الشّيفرة أعلاه على توضيح ما تقوم به الدّالة (رغم أنّ التّطبيق الفعليّ أكثر تعقيدًا ويستخدم طابور FIFO واحدًا فقط).
 
ستُساعد الشّيفرة أعلاه على توضيح ما تقوم به الدّالة (رغم أنّ التّطبيق الفعليّ أكثر تعقيدًا ويستخدم طابور FIFO واحدًا فقط).
* حالما تقسم الدّالة <code>itertools.tee()‎</code> مُكرّرًا فلا يجب استخدام الكائن القابل للتّكرار في أي مكان آخر، وإلّا قد يتقدّم دون إعلام كائنات  <code>itertools.tee()‎</code>.
+
* حالما تقسم الدّالة <code>itertools.tee()‎</code> مُكرّرًا فلا يجب استخدام الكائن القابل للتّكرار الأصليّ في أي مكان آخر، وإلّا قد يتقدّم دون إعلام كائنات  <code>itertools.tee()‎</code>.
* قد تحتاج هذه الدّالة إلى ذاكرة كبيرة حسب حجم البيانات المؤقّتة التي ستحتاج إلى تخزينها. إن كان مُكرّرٌ يستخدم مُعظم أو كلّ البيانات قبل أن يبدأ مُكرّر آخر، فاستخدام الدّالة [[Python/list|الدالة <code>list()‎</code>]] أسرع من الدّالة <code>itertools.tee()‎</code>.
+
* قد تحتاج هذه الدّالة إلى ذاكرة كبيرة حسب حجم البيانات المؤقّتة التي ستحتاج إلى تخزينها. إن كان مُكرّرٌ يستخدم مُعظم أو كلّ البيانات قبل أن يبدأ مُكرّر آخر، فاستخدام الدّالة [[Python/list|<code>list()‎</code>]] أسرع من الدّالة <code>itertools.tee()‎</code>.
  
 
== انظر أيضًا ==
 
== انظر أيضًا ==

مراجعة 11:25، 18 يونيو 2018

تعيد الدّالة itertools.tee()‎ عددًا مُحدّدًا من المُكرّرات المُستقلّة عن بعضها البعض من كائن واحد قابل للتّكرار.

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

itertools.tee(iterable, n=2)

المعاملات

iterable

الكائن القابل للتّكرار.

n

عدد المُكرّرات المُستقلّة المرغوب إنشاؤها من الكائن iterable.

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

عددٌ n من المُكرّرات المُستقلّة المُولَّدة من الكائن القابل للتّكرار المُعطى.

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:

>>> it = itertools.tee('abc', 2)
>>> it
(<itertools._tee object at 0x7f79c6fc9f48>, <itertools._tee object at 0x7f79c4e73588>)
>>> [list(i) for i in it]
[['a', 'b', 'c'], ['a', 'b', 'c']]

ملاحظات

  • الدّالة مُكافئة لما يلي:
def tee(iterable, n=2):
    it = iter(iterable)
    deques = [collections.deque() for i in range(n)]
    def gen(mydeque):
        while True:
            if not mydeque:             # when the local deque is empty
                try:
                    newval = next(it)   # fetch a new value and
                except StopIteration:
                    return
                for d in deques:        # load it to all the deques
                    d.append(newval)
            yield mydeque.popleft()
    return tuple(gen(d) for d in deques)

ستُساعد الشّيفرة أعلاه على توضيح ما تقوم به الدّالة (رغم أنّ التّطبيق الفعليّ أكثر تعقيدًا ويستخدم طابور FIFO واحدًا فقط).

  • حالما تقسم الدّالة itertools.tee()‎ مُكرّرًا فلا يجب استخدام الكائن القابل للتّكرار الأصليّ في أي مكان آخر، وإلّا قد يتقدّم دون إعلام كائنات itertools.tee()‎.
  • قد تحتاج هذه الدّالة إلى ذاكرة كبيرة حسب حجم البيانات المؤقّتة التي ستحتاج إلى تخزينها. إن كان مُكرّرٌ يستخدم مُعظم أو كلّ البيانات قبل أن يبدأ مُكرّر آخر، فاستخدام الدّالة list()‎ أسرع من الدّالة itertools.tee()‎.

انظر أيضًا

مصادر