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

Article author: Andrei Olegovich

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

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: