الدالة functools.reduce()‎ في بايثون

من موسوعة حسوب
مراجعة 16:28، 23 يونيو 2018 بواسطة عبد-الهادي-الديوري (نقاش | مساهمات) (إضافة الصّفحة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تُطبّق الدّالة functools.reduce()‎ دالّة تأخذ مُعاملين بتراكب لعناصر الكائن القابل للتّكرار المُعطى، من اليسار إلى اليمين لتخفيض العناصر إلى قيمة واحدة (كجمع عدّة مبالغ للحصول على مبلغ إجماليّ واحد مثلًا).


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

functools.reduce(function, iterable[, initializer])

المعاملات

function

الدّالة المُراد تطبيقها على عناصر الكائن القابل للتّكرار.

iterable

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

initializer

قيمة بدئيّة تُضاف إلى بداية العناصر قبل بدء الحساب، وتكون كذلك قيمة افتراضيّة عندما يكون الكائن القابل للتّكرار فارغًا.

إن لم تُمرّر قيمة للمُعامل initializer واحتوى الكائن القابل للتّكرار على عنصر واحد فقط، فسيُعاد ذات العنصر.

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

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة، هنا يجمع تعبير lambda آخر نتيجة (أي المُعامل y) مع كلّ عنصر من العناصر (المُعامل x):

>>> functools.reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
15

الاستدعاء أعلاه يقوم بالعمليّة الحسابيّة التّاليّة:

((((1+2)+3)+4)+5)

ملاحظات

الدّالة مُكافئة لما يلي:

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        value = next(it)
    else:
        value = initializer
    for element in it:
        value = function(value, element)
    return value

انظر أيضًا

مصادر