Что такое функция первого класса в Python
Я все еще не понимаю, что first-class functions
являются. Если я правильно понимаю, first-class functions
следует использовать одну функцию в качестве объекта. Это правильно?
Это first-class function
?
def this_is_example(myarg1):
return myarg1
def this_is_another_ example(myarg):
return this_is_example(myarg)+myarg
this_is_another_ example(1)
6 ответов
Функция первого класса не является определенным видом функции. Все функции в Python являются функциями первого класса. Сказать, что функции являются первоклассными в определенном языке программирования, означает, что их можно передавать и манипулировать аналогично тому, как вы бы передавали и манипулировали объектами других типов (например, целыми числами или строками). Вы можете назначить функцию переменной, передать ее в качестве аргумента другой функции и т. Д. Различие не в том, что отдельные функции могут быть первоклассными или нет, а в том, что целые языки могут обрабатывать функции как объекты первого класса или не могут,
"Функции первого класса" (FCF) - это функции, которые рассматриваются как так называемые "граждане первого класса" (FCC). FCC в языке программирования являются объектами (здесь очень свободно используется термин "объекты"), которые:
- Может использоваться в качестве параметров
- Может использоваться как возвращаемое значение
- Может быть назначен переменным
- Может храниться в структурах данных, таких как хеш-таблицы, списки,...
На самом деле, очень грубо и просто, FCF - это переменные типа "функция" (или переменные, которые указывают на функцию). Вы можете делать с ними все, что можете делать с "нормальной" переменной.
Зная это, оба this_is_another_example(myarg)
а также this_is_example(myarg1)
являются функциями первого класса, так как все функции являются первоклассными в определенных языках программирования.
Нет. Вы говорите о функциях высшего порядка - см.
Функции первого класса: если функция может быть назначена переменной или передана как объект / переменная другой функции, эта функция вызывается как функция первого класса.
Python, JavaScript и C(указатели) поддерживают функции первого класса.
Простой пример (на питоне):
def square(x): return x * x
def cube(x): return x * x * x
def print_result(x, func):
"""recieve a function and execute it and return result"""
return func(x)
do_square = square # assigning square function to a variable
do_cube = cube # assigning cube function to a variable
res = print_result(5, do_square) # passing function to another function
print res
res = print_result(5, do_cube)
print res
Эта программа только для иллюстрации.
Функции первого класса в Python:
Концепция "первоклассного" касается только функций в языках программирования. Первоклассные функции означают, что язык обрабатывает функции как значения - что вы можете назначить функцию переменной, передать ее и т. Д. Это редко используется при обращении к функции, такой как "функция первого класса". Гораздо чаще говорят, что "язык имеет / не имеет поддержки первоклассных функций". Таким образом, "имеет первоклассные функции" - это свойство языка.
Свойства функций первого класса:
- Функция - это экземпляр типа Object.
- Вы можете сохранить функцию в переменной.
- Вы можете передать функцию в качестве параметра другой функции.
- Вы можете вернуть функцию из функции.
- Вы можете хранить их в структурах данных, таких как хеш-таблицы, списки и т. Д.
Итак, языки, которые поддерживают значения с функциональными типами и обрабатывают их так же, как нефункциональные значения, можно сказать, что они имеют "функции первого класса".
def pie(r):
def circleArea(d):
return r * (d ** 2)
return circleArea
c = pie(3.14)
print c(2)
Выше приведен пример для функции первого класса в Python.
Функции первого класса в Python
Первоклассные объекты в языке обрабатываются единообразно. Они могут храниться в структурах данных, передаваться в качестве аргументов или использоваться в управляющих структурах. Говорят, что язык программирования поддерживает первоклассные функции, если он рассматривает функции как первоклассные объекты. Python поддерживает концепцию функций первого класса.
Свойства функций первого класса:
Функция является экземпляром типа Object.
- Вы можете сохранить функцию в переменной.
- Вы можете передать функцию в качестве параметра другой функции.
- Вы можете вернуть функцию из функции.
- Вы можете хранить их в структурах данных, таких как хеш-таблицы, списки,...
Примеры, иллюстрирующие функции первого класса в Python
1. Функции являются объектами: функции Python являются объектами первого класса. В приведенном ниже примере мы присваиваем функцию переменной. Это назначение не вызывает функцию. Он берет объект функции, на который ссылается shout, и создает второе имя, указывающее на него, yell.
# Python program to illustrate functions
# can be treated as objects
def shout(text):
return text.upper()
print shout('Hello')
yell = shout
print yell('Hello')
Выход:
ПРИВЕТ
ПРИВЕТ
- Функции могут быть переданы в качестве аргументов другим функциям: поскольку функции являются объектами, мы можем передавать их в качестве аргументов другим функциям. Функции, которые могут принимать другие функции в качестве аргументов, также называются функциями высшего порядка. В приведенном ниже примере мы создали функцию greet, которая принимает функцию в качестве аргумента.
# Python program to illustrate functions
# can be passed as arguments to other functions
def shout(text):
return text.upper()
def whisper(text):
return text.lower()
def greet(func):
#storing the function in a variable
greeting = func("Hi, I am created by a function passed as an argument.")
print greeting
greet(shout)
greet(whisper)
Выход:
ПРИВЕТ, Я СОЗДАН ФУНКЦИЕЙ, ПРОЙДЕННОЙ В АРГУМЕНТЕ.
привет, я создан функцией, переданной в качестве аргумента
- Функции могут возвращать другую функцию: поскольку функции являются объектами, мы можем вернуть функцию из другой функции. В приведенном ниже примере функция create_adder возвращает функцию adder.
#Python program to illustrate functions
#Functions can return another function
def create_adder(x):
def adder(y):
return x+y
return adder
add_15 = create_adder(15)
print add_15(10)
Выход:
25
Каждая функция в Python является первым классом, потому что они могут передаваться как любой другой объект.
Это хороший пример, иллюстрирующий первоклассные функции Python в их классической форме: переменная, содержащая лямбда-функцию:
twice = lambda x: 2 * x
d = twice(5)
print(d) # 10