الوحدة itertools
في بايثون
تقّدم الوحدة itertools
مجموعة من الأدوات المُساعدة على بناء مُكرّرات مُشابهة لتلك المتوفّرة في لغات مثل APL، وHaskell وSML. بُني كلّ منها بطريقة تُناسب لغة بايثون.
الأدوات المُتوفّرة سريعة وتستخدم الذّاكرة بشكل فعّال، وهي مُفيدة سواء بمُفردها أو عبر دمج بعضها ببعض. وعند دمجها مع بعض، تُشكّل "جبرَ مُكرّرات” تُعدّ وسيلة يُمكن استعمالها لإنشاء أدوات أكثر تخصّصًا بشكل فعّال باستخدام بايثون فقط دون الحاجة إلى أيّة لغة برمجيّة أخرى.
تُوفّر لغة SML مثلًا الدّالة tabulate(f)
التي تُنتج السّلسلة f(0), f(1), ...
. يُمكن الحصول على نفس النّتيجة في بايثون عبر دمج الدّالة map()
والدّالة count()
على شكل map(f, count())
.
تعمل هذه الأدوات والدّوال المبنيّة المُكافئة لها جيّدًا مع الدّوال السّريعة الموجودة في الوحدة operator
أيضًا. فمثلًا يُمكن ربط عامل الضّرب (multiplication operator) بين متّجهتين (vectors) لتشكيل جداء سُلميّ (dot-product) فعّال:
sum(map(operator.mul, vector1, vector2))
مكررات لامتناهية
itertools.count()
تعيد مُكرّرًا يُعيد قيمًا مُتساويّة الفرق بدءًا من قيمةٍ بدئيّة.
itertools.cycle()
تعيد مُكرّرًا يُعيد عناصر الكائن القابل للتّكرار المُعطى ويحفظ نسخة منه، عندما تنتهي قيم الكائن القابل للتّكرار، يُعيد المُكرّر عناصر النّسخة المحفوظة، ويُكرّر ذلك مرارًا وتكرارًا دون نهاية.
itertools.repeat()
تعيد مُكرّرًا يُعيد كائنًا مرارًا وتكرارًا بشكل لا نهائي أو لعدد مُحدّد من المرّات.
مكررات تنتهي عند أقصر تسلسل
itertools.accumulate()
تعيد مُكرّرًا يُعيد مجموعات مُتراكمة، أو نتائج مُتراكمةً من دالّة أخرى.
itertools.chain()
itertools.chain.from_iterable()
itertools.compress()
itertools.dropwhile()
itertools.filterfalse()
itertools.groupby()
itertools.islice()
itertools.starmap()
itertools.starmap()
itertools.tee()
itertools.zip_longest()
مكررات دامجة
المُكرّرات الدّامجة تدمجُ بين التّسلسلات لإنشاء تسلسلات أخرى.