Эта статья была впервые опубликована здесь
Каковы функции первого класса?
Функции в языке программирования считаются гражданами первого класса, если они демонстрируют следующие характеристики.
- Их можно хранить в переменных.
- Их можно хранить в структурах данных.
- Их можно пропустить как аргумент к функции.
- Они могут быть возвращены как значения из другой функции.
Python поддерживает все эти функции, чтобы функции рассматривались как граждане первого класса.
Это не только Python, только в любых средствах, многие другие языки лечат функционируют как граждане первого класса, а именно JavaScript, PHP, Perl. Они в значительной степени необходимы для стиля функционального программирования.
Определение функций
Как вы уже должны знать, мы определим функции в Python с деф
ключевое слово.
def foo(): pass
Функция хранится в месте памяти, как показано ниже по адресу 0x0376cb28
Отказ
>>> foo
Хранение функций в переменных
Как функция в Python – граждане первого класса, вы можете хранить функцию в переменной.
>>> foo>>> bar = foo >>> bar
Несмотря на то, что функция назначается отдельной переменной бар
Обратите внимание, что расположение функции все еще остается одинаковым. Его просто 2 переменных, хранящих расположение той же функции в памяти.
Не только вы можете хранить их в простых переменных, но вы можете хранить функции в списке, Dict и других структурах данных, как показано ниже.
# storing in list >>> mylist = [] >>> mylist.append(foo) # storing in dict >>> mydict = {} >>> mydict['function_foo']= foo
Прохождение функций в качестве аргументов
Функции могут быть переданы как аргументы в другую функцию. Проверьте образец ниже.
def main(func): print(func) def foo(): pass print(foo) main(foo)
Вывод показан ниже …
Функция Foo
передается как аргумент для функции Главная
И мы можем подтвердить, что это та же функция Foo
который Главная
Получил в качестве аргумента путем печати адреса памяти (особенность CPYthon) функции глобально, а также в Главная
функция.
Возвращая функции
Точно так же функция может вернуть другую функцию.
def foo(): pass def main(): return foo # returns a function bar = main()
Как вы видите адрес памяти все еще одинаково для фюра
и бар
Отказ
>>> foo>>> bar
Преимущества функций первого класса
Там могут быть многочисленные преимущества этого подхода, некоторые из них перечислены ниже. Вы можете проверить следующие темы для дальнейшего раскопки глубже.
- Декораторы
- Динамический инспекция кода
- Обратные вызовы
Оригинал: “https://dev.to/therajatsethi/first-class-functions-in-python-1gan”