Несколько примеров на Python. Модификация функции min - задаём диапазон чисел. Несколько примеров функционального программирования.

Используем механизм передачи функции в качестве значения для другой функции. Модифицируем функцию min (минимальное число из списка), задав ей диапазон возвращаемых значений:

def make_min(*, lo, hi):
    def inner(first, *args):
        res = hi
        for arg in (first, ) + args:
            if arg < res and lo < arg < hi:
                res = arg
        return max(res, lo)
    return inner



Пример использования:

>>> bounded_min = make_min(lo=0, hi=255)
>>> bounded_min(-5, 12, 23, 3, 4, 3)
3



Ещё пример. Получаем все нечётные числа от 1 до 100, используя lambda:

list(filter(lambda x: x % 2 != 0, range(100)))



Аналогично, с помощью механизма формирования списка:

[x for x in range(100) if x % 2 != 0]


Последний вариант более предпочтителен, т.к. позволяет получить искомое меньшими затратами. На следующем примере, мы видим это нагляднее.

Сначала сгенерируем список кубов всех нечётных чисел от 1 до 10, используя lambda:

>>> list(map(lambda x: x ** 3,
... 		 filter(lambda x: x % 2 != 0, range(10))))
... 
[1, 27, 125, 343, 729]



Теперь делаем то же, используя механизм формирования списка:

>>> [x ** 3 for x in range(10) if x % 2 != 0]
[1, 27, 125, 343, 729]


Как видим, в последнем случае код короче и читабельней.

05 07 2016

Теги заметки: