first-class

Contents
Введение
Пример
Реализация 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]

Banner Image

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

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

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

Related Articles
Функции
Python
Лямбда функции
map()
all()
Замыкания

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedbak and Questions in Telegram

@aofeedchat