Hello World
1.6K subscribers
71 photos
6 videos
3 files
161 links
Be so good that you cannot be ignored. And then, go one step beyond.
Download Telegram
Currying.

Теперь о каррировании. Каррирование (от англ. currying, иногда — карринг) — преобразование функции от многих аргументов в набор функций, каждая из которых является функцией от одного аргумента

Зачем нужно каррирование
📌С каррированием можно создавать краткие и лаконичные функции, подходящие для многоразового использования.
📌Эти функции используются в качестве чистых и пригодных для тестирования логических единиц при создании сложных с точки зрения логики частей программ.

В самом простейшем случае можно реализовать каррирование с помощью лямбда-функций.
f = lambda y: lambda x: x + y
print(f(2)(2))

Out [0]: 4


Создадим простую функцию greet, которая принимает в виде аргументов приветствие и имя.
def greet(greeting, name):
print(greeting + ', ' + name)

greet('Hello', 'Nameless')


Небольшое улучшение позволит нам создать новую функцию для любого приветствия и передать этой функции имя.
def greet_curried(greeting):
def greet(name):
print(greeting + ', ' + name)
return greet

greet_hello = greet_curried('Hello')

greet_hello('German')
greet_hello('Ivan')

# или напрямую greet_curried
greet_curried('Hi')('Roma')


Сделать это можно с любым числом аргументов.
def greet_deeply_curried(greeting):
def w_separator(separator):
def w_emphasis(emphasis):
def w_name(name):
print(greeting + separator + name + emphasis)
return w_name
return w_emphasis
return w_separator

greet = greet_deeply_curried("Hello")("...")(".")
greet('German')
greet('Ivan')


#currying