| # На данном этапе мы еще не указываем имена переменных
| def rectangle_area_finder( ):
| """
| >>> rectangle_area_finder(3, 5)
| 15
| >>> rectangle_area_finder(17.2, 6)
| 103.2
| """
2. Указать типы данных, которые принимает функция и тип данных, который она возвращает
| # функция принимает два числа, а возвращает одно
| def rectangle_area_finder( ):
| """
| (num, num) -> num
| >>> rectangle_area_finder(3, 5)
| 15
| >>> rectangle_area_finder(17.2, 6)
| 103.2
| """
3. Подобрать подходящие названия для переменных
| # Поскольку это математическая функция нам вполне подойдут имена a и b
| def rectangle_area_finder(a, b):
| """
| (num, num) -> num
| >>> rectangle_area_finder(3, 5)
| 15
| >>> rectangle_area_finder(17.2, 6)
| 103.2
| """
4. Написать краткое, но содержательное описание функции
| def rectangle_area_finder(a, b):
| """
| (num, num) -> num
| Returns an area of a rectangle with given sides a and b.
| >>> rectangle_area_finder(3, 5)
| 15
| >>> rectangle_area_finder(17.2, 6)
| 103.2
| """
5. Написать собственно тело функции
| def rectangle_area_finder(a, b):
| """
| (num, num) -> num
| Returns an area of a rectangle with given sides a and b.
| >>> rectangle_area_finder(3, 5)
| 15
| >>> rectangle_area_finder(17.2, 6)
| 103.2
| """
| return a * b
6. Функция готова! Осталось вызвать ее с указанными в примерах аргументами
Как видно, при вызове команды help() с именем нашей функции в качестве аргумента мы получаем написанную нами документацию.
Сопровождайте ваши функции качественной документацией и программисты, которые будут работать с вашим кодом после вас будут вам благодарны.
Функциональное программирование в Python: lambda, zip, filter, map reduce
Published: 09 March 2017
Функциональным называется такой подход к процессу программирования, в программа рассматривается как вычисление математических функций, при этом не используются состояния и изменяемые объекты. Как правило, когда говорят о элементах функционального программировании в Python, то подразумеваются следующие функции: lambda, map, filter, reduce, zip.
Lambda выражение в Python:
lambda операторили lambda функция в Pythonэто способ создать анонимную функцию, то есть функцию без имени. Такие функции можно назвать одноразовыми, они используются только при создании. Как правило, lambda функциииспользуются в комбинации с функциями filter, map, reduce.
Синтаксис lambda выражения в Python
1 | lambda arguments: expression
В качестве arguments передается список аргументов, разделенных запятой, после чего над переданными аргументами выполняется expression. Если присвоить lambda-функцию переменной, то получим поведение как в обычной функции (делаем мы это исключительно в целях демонстрации)
1 | >>> multiply = lambda x,y: x * y
2 | >>> multiply(21, 2)
3 | 42
Но, конечно же, все преимущества lambda-выражений мы получаем, используя lambda в связке с другими функциями
Функция map() в Python:
В Python функция mapпринимает два аргумента: функцию и аргумент составного типа данных, например, список. map применяет к каждому элементу списка переданную функцию. Например, вы прочитали из файла список чисел, изначально все эти числа имеют строковый тип данных, чтобы работать с ними - нужно превратить их в целое число:
1 | old_list = ['1', '2', '3', '4', '5', '6', '7']
2 |
3 | new_list = []
4 | for item in old_list:
5 | new_list.append(int(item))
6 |
7 | print (new_list)
8 |
9 | [1, 2, 3, 4, 5, 6, 7]
Тот же эффект мы можем получить, применив функцию map:
1 | old_list = ['1', '2', '3', '4', '5', '6', '7']
2 | new_list = list(map(int, old_list))
3 | print (new_list)
4 |
5 | [1, 2, 3, 4, 5, 6, 7]
Как видите такой способ занимает меньше строк, более читабелен и выполняется быстрее. map также работает и с функциями созданными пользователем:
1 | def miles_to_kilometers(num_miles):
2 | """ Converts miles to the kilometers """
3 | return num_miles * 1.6
4 |
5 | mile_distances = [1.0, 6.5, 17.4, 2.4, 9]
6 | kilometer_distances = list(map(miles_to_kilometers, mile_distances))
7 | print (kilometer_distances)
[1.6, 10.4, 27.84, 3.84, 14.4]
А теперь то же самое, только используя lambda выражение:
1 | mile_distances = [1.0, 6.5, 17.4, 2.4, 9]
Читать дальше