الدالة itertools.tee()
في بايثون
تعيد الدّالة 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()
.
انظر أيضًا
- المكرِّرات Iterators في بايثون.
- المولدات Generators في بايثون.
- الدالة
list()
: تُحوّل كائنًا قابلًا للتّكرار إلى قائمة.