الفرق بين المراجعتين لصفحة: «Python/itertools/tee»
إضافة الصّفحة |
|||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:الدالة <code>itertools. | <noinclude>{{DISPLAYTITLE:الدالة <code>itertools.tee()</code> في بايثون}}</noinclude> | ||
تعيد الدّالة <code>itertools. | تعيد الدّالة <code>itertools.tee()</code> عددًا مُحدّدًا من المُكرّرات المُستقلّة عن بعضها البعض من كائن واحد قابل للتّكرار. | ||
== البنية العامة == | == البنية العامة == | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
itertools. | itertools.tee(iterable, n=2) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== المعاملات == | == المعاملات == | ||
=== <code> | === <code>iterable</code> === | ||
الكائن القابل للتّكرار. | |||
=== <code>n</code> === | |||
عدد المُكرّرات المُستقلّة المرغوب إنشاؤها من الكائن <code>iterable</code>. | |||
=== <code> | |||
الكائن | |||
== القيمة المعادة == | == القيمة المعادة == | ||
عددٌ <code>n</code> من المُكرّرات المُستقلّة المُولَّدة من الكائن القابل للتّكرار المُعطى. | |||
== أمثلة == | == أمثلة == | ||
المثال التّالي يوضّح كيفيّة عمل هذه | المثال التّالي يوضّح كيفيّة عمل هذه الدّالة: | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
>>> it = itertools. | >>> it = itertools.tee('abc', 2) | ||
>>> list(it | >>> it | ||
[ | (<itertools._tee object at 0x7f79c6fc9f48>, <itertools._tee object at 0x7f79c4e73588>) | ||
>>> [list(i) for i in it] | |||
[['a', 'b', 'c'], ['a', 'b', 'c']] | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== ملاحظات == | == ملاحظات == | ||
الدّالة مُكافئة لما يلي: | * الدّالة مُكافئة لما يلي: | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
def | def tee(iterable, n=2): | ||
it = iter(iterable) | |||
for | deques = [collections.deque() for i in range(n)] | ||
if | 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) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
ستُساعد الشّيفرة أعلاه على توضيح ما تقوم به الدّالة (رغم أنّ التّطبيق الفعليّ أكثر تعقيدًا ويستخدم طابور FIFO واحدًا فقط). | |||
* حالما تقسم الدّالة <code>itertools.tee()</code> مُكرّرًا فلا يجب استخدام الكائن القابل للتّكرار في أي مكان آخر، وإلّا قد يتقدّم دون إعلام كائنات <code>itertools.tee()</code>. | |||
* قد تحتاج هذه الدّالة إلى ذاكرة كبيرة حسب حجم البيانات المؤقّتة التي ستحتاج إلى تخزينها. إن كان مُكرّرٌ يستخدم مُعظم أو كلّ البيانات قبل أن يبدأ مُكرّر آخر، فاستخدام الدّالة [[Python/list|الدالة <code>list()</code>]] أسرع من الدّالة <code>itertools.tee()</code>. | |||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Python/iterators|المكرِّرات Iterators في بايثون]]. | * [[Python/iterators|المكرِّرات Iterators في بايثون]]. | ||
* [[Python/generators|المولدات Generators في بايثون]]. | * [[Python/generators|المولدات Generators في بايثون]]. | ||
* | * [[Python/list|الدالة <code>list()</code> في بايثون]]: تُحوّل كائنًا قابلًا للتّكرار إلى قائمة. | ||
== مصادر == | == مصادر == | ||
* [https://docs.python.org/3/library/itertools.html#itertools. | * [https://docs.python.org/3/library/itertools.html#itertools.tee قسم الدالة itertools.tee في توثيق Python الرسمي]. | ||
[[تصنيف:Python]] | [[تصنيف:Python]] | ||
[[تصنيف:Python Function]] | [[تصنيف:Python Function]] | ||
[[تصنيف:Python Modules]] | [[تصنيف:Python Modules]] | ||
[[تصنيف:Python itertools]] | [[تصنيف:Python itertools]] |
مراجعة 11:22، 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()
.
انظر أيضًا
- المكرِّرات Iterators في بايثون.
- المولدات Generators في بايثون.
- الدالة
list()
في بايثون: تُحوّل كائنًا قابلًا للتّكرار إلى قائمة.