first-class

Содержание
Введение
Пример
Реализация map()
Возвращение функции
Похожие статьи

Введение

В информатике язык программирования имеет функции первого класса, если он рассматривает функции как объекты первого класса. В частности, это означает, что язык поддерживает передачу функций в качестве аргументов другим функциям, возврат их как результат других функций, присваивание их переменным или сохранение в структурах данных.

Функции первого класса являются неотъемлемой частью функционального программирования, в котором использование функций высшего порядка является стандартной практикой.

Простым примером функции высшего порядка будет функция map() , которая принимает в качестве своих аргументов функцию и список и возвращает список после применения функции к каждому элементу списка.

Чтобы язык программирования поддерживал map(), он должен поддерживать передачу функций как аргумента.

Функция высшего порядка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата.

Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.

Пример

Создайте файл first-class.py

def square(x): return x * x f = square(5) print(square) print(f)

python first_class.py

<function square at 0x7ff58d862040> 25

Изменим код

def square(x): return x * x f = square print(square) print(f) print(f(5))

python first_class.py

<function square at 0x7fd877dbd040> <function square at 0x7fd877dbd040> 25

map()

Рассмотрим пример реализации кастомной функции map() из статьи «Функция map() в Python»

def square(x): return x * x def my_map(func, arg_list): result = [] for i in arg_list: result.append(func(i)) return result squares = my_map(square, [1, 2, 3, 4, 5]) print(squares)

python custom_map.py

[1, 4, 9, 16, 25]

Возвращение функции

Пример возвращения функции

def logger(msg): def log_message(): print('Log:', msg) return log_message log_hi = logger('Hi!') log_hi()

python first_class.py

Log: Hi!

Более сложный пример

def html_tag(tag): def wrap_text(msg): print('<{0}>{1}</{0}>'.format(tag, msg)) return wrap_text print_h1 = html_tag('h1') print(print_h1) print_h1('Test Headline!') print_h1('Another Headline!') print_p = html_tag('p') print_p('Test Paragraph!')

python first_class.py

<function html_tag.<locals>.wrap_text at 0x7f6b97f6db80> <h1>Test Headline!</h1> <h1>Another Headline!</h1> <p>Test Paragraph!</p>

Пояснения на примере print_h1:

print_h1 = html_tag('h1')

Заряжает функцию html_tag тегом h1

Теперь все , что будет передано в print_h1 это уже не tag, а msg, так как наружу уже торчит не html_tag а wrap_text

Это видно когда выполняется print(print_h1)

<function html_tag.<locals>.wrap_text at 0x7f6b97f6db80>

и этот msg будет попадать именно во внутреннюю функцию wrap_text и оборачиваться тегом h1

Похожие статьи
Функции
Python
Лямбда функции
map()
all()
Замыкания

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: