Lambda, map, filter, reduce
Кичинекей анонимдик функциялар жана маалыматты өзгөртүүчү функционалдык үчтүк
lambda — бул бир сапка жазылган кичинекей, атсыз функция. map, filter жана reduce — булар жогорку тартиптеги функциялар: алар башка функцияны кабыл алып, аны бүтүн ырааттуулукка колдонуп, аны өзгөртөт, андан элементтерди тандап алат же аны бир мааниге жыйнайт.
lambdaжазуу жана ал качан пайдалуу, качан эмес экенин билүү,- ырааттуулуктун ар бир элементин
mapменен өзгөртүү, filterменен керектүү элементтерди гана калтыруу,functools.reduceменен ырааттуулукту бир маниге жыйноо,- окулуштун жагынан comprehension же жөнөкөй циклге салыштырып чечим кабыл алуу.
1. lambda деген эмне?
lambda — бул анонимдик функция: аты жок, керек болгон жерде эле аныкталган функция. Синтаксис: lambda ачкыч сөзү, андан кийин параметрлер, эки чекит жана мааниси автоматтык түрдө кайтарылуучу бир туюнтма.
double = lambda x: x * 2
print(double(5)) # 10
Бул lambda төмөнкү аталган функцияга так барабар:
def double(x):
return x * 2
lambda бир нече параметрди үтүр менен кабыл ала алат:
add = lambda a, b: a + b
print(add(3, 4)) # 7
return ачкыч сөзү жок (натыйжа сиз үчүн кайтарылат), жана ага ыйгаруу, циклдер же бир нече нускама коюуга болбойт. Алар керек болгондо def колдонуңуз.2. map: ар бир элементти өзгөртүү
map(function, iterable) ар бир элементке function колдонуп, натыйжаларды берет. Python 3те жалкоо итератор (map объекти) кайтарылат, ошондуктан маанилерди көрүү үчүн аны адатта list() менен ороп коёбуз.
nums = [1, 2, 3, 4]
squares = list(map(lambda n: n * n, nums))
print(squares) # [1, 4, 9, 16]
Функция милдеттүү түрдө lambda болбошу мүмкүн — каалаган чакырылуучу объект, анын ичинде орнотулгандар да иштейт:
prices = ["10", "25", "7"]
as_int = list(map(int, prices))
print(as_int) # [10, 25, 7]
map бир нече ырааттуулукту бир убакта кыдыра алат; анда функция ар биринен бирден аргумент алат:
a = [1, 2, 3]
b = [10, 20, 30]
sums = list(map(lambda x, y: x + y, a, b))
print(sums) # [11, 22, 33]