Академия Eduson

Анонимные функции. Часть 1

 Работа с анонимными функциями

 Именем какой греческой буквы названо ключевое слово «Python», объявляющее анонимную функцию?

 Ответ:  лямбда

 Нужно ли заключать параметры анонимных функций в скобки?

 Ответ:  нет

 Анонимная функция – это функция:

 Ответ:   у которой есть тело, но нет имени

 Анонимные функции в «Python»:

 Ответ: 

  • состоят из одного выражения (возможно, составного);
  • в виде объявления сами являются выражениями;
  • являются замыканиями (могут замыкать переменные из внешнего контекста);
  • могут иметь *args и **kwargs

 Выберите правильный вариант написания лямбда-выражения для функции f(x)=2x+1

 Ответ:  f = lambda x: 2*x + 1

 Что будет напечатано в результате работы программы?:

func = lambda x, y: x ** y

print(func(5, 3))

 Ответ: 125

 Что будет напечатано в результате работы программы?:

func = lambda x, y: x + y

print(func('5', '3'))

 Ответ:  53

 Что будет напечатано в результате работы программы?:

funcs = [lambda x: x ** 0.5, lambda x: x ** 2, lambda x: x ** 3]

print(funcs[1](9))

 Ответ:  81

 Что будет напечатано в результате работы программы?:

users = [('Timur', 28), ('Ruslan', 21), ('Roman', 30), ('Soltan', 24), ('Robert', 1)]
result = max(users, key=lambda x: x[1])

print(result)

 Ответ:  ('Roman', 30)

 Что будет напечатано в результате работы программы?:

from functools import reduce

numbers = range(10)
obj = map(lambda x: x + 1, numbers)
obj = filter(lambda x: x % 2 == 1, obj)
result = reduce(lambda x, y: x + y, obj, 0)

print(result)

 Ответ:  25

 Что будет напечатано в результате работы программы?:

result = list(map(lambda x: x.split(), ['a', 'a b', 'a b c']))

print(result)

 Ответ:  [['a'], ['a', 'b'], ['a', 'b', 'c']]

 Что будет напечатано в результате работы программы?:

high_ord_func = lambda x, func: x + func(x)

result = high_ord_func(2, lambda x: x * x) + high_ord_func(5, lambda x: x + 3)

print(result)

 Ответ:  19

 Что будет напечатано в результате работы программы?:

dict1 = {'x': 1}
dict2 = {'y': 2}
dict3 = {'x': 3, 'y': 4}

result = list(filter(lambda d: 'x' in d.keys(), [dict1, dict2, dict3]))

print(result)

 Ответ:  [{'x': 1}, {'x': 3, 'y': 4}]

 Требовалось написать программу, которая:

  • преобразует список floats в список чисел, возведенных в квадрат и округленных с точностью до одного десятичного знака;
  • фильтрует список words и оставляет только палиндромы длиной более 4 символов;
  • находит произведение чисел из списка numbers.

 Программист торопился и написал программу неправильно. Доработайте его программу.

from functools import reduce 

floats = [4.35, 6.09, 3.25, 9.77, 2.16, 8.88, 4.59, 34.23, 12.12, 4.67, 2.45, 9.32]
words = ['racecar', 'akinremi', 'deed', 'temidayo', 'omoseun', 'civic', 'TATTARRATTAT', 'malayalam', 'nun']
numbers = [4, 6, 9, 23, 5]

# Исправьте этот код
map_result = list(map(lambda num: round(num**2, 1), floats))
filter_result = list(filter(lambda name:len(name) > 4 and name == name[::-1], words))
reduce_result = reduce(lambda num1, num2: num1 * num2, numbers, 1)

print(map_result)
print(filter_result)
print(reduce_result)

 Напишите программу, которая с помощью встроенных функций filter(), map(), sorted() и reduce() выводит в алфавитном порядке список primary городов с населением более 10 000 000 человек, в формате: Cities: Beijing, Buenos Aires, ...

from functools import reduce

data = [['Tokyo', 35676000, 'primary'],
        ['New York', 19354922, 'nan'],
        ['Mexico City', 19028000, 'primary'],
        ['Mumbai', 18978000, 'admin'],
        ['Sao Paulo', 18845000, 'admin'],
        ['Delhi', 15926000, 'admin'],
        ['Shanghai', 14987000, 'admin'],
        ['Kolkata', 14787000, 'admin'],
        ['Los Angeles', 12815475, 'nan'],
        ['Dhaka', 12797394, 'primary'],
        ['Buenos Aires', 12795000, 'primary'],
        ['Karachi', 12130000, 'admin'],
        ['Cairo', 11893000, 'primary'],
        ['Rio de Janeiro', 11748000, 'admin'],
        ['Osaka', 11294000, 'admin'],
        ['Beijing', 11106000, 'primary'],
        ['Manila', 11100000, 'primary'],
        ['Moscow', 10452000, 'primary'],
        ['Istanbul', 10061000, 'admin'],
        ['Paris', 9904000, 'primary']]

w = list(filter(lambda x: x[1] > 10000000 and x[2] == 'primary', data))
a = list(map(lambda x: x[0], w))
a = list(sorted(a))
b = reduce(lambda x, y: x + ' ' + y + ',', a, 'Cities:')

print(b[:-1])