Appearance
Функция как объект в языке Python
Функции в Python являются объектами первого класса. Это означает, что их можно присваивать переменным, хранить в коллекциях, передавать в качестве аргументов другим функциям и возвращать как результат. В этой статье мы рассмотрим, как работать с функциями как с объектами, приведём примеры и предложим упражнения для практики.
1. Сохранение функции без параметров в переменную и вызов функции
В Python можно присвоить функцию переменной и вызвать её позже через эту переменную. Это полезно, когда нужно передать функцию в качестве аргумента другой функции или просто сохранить ссылку на неё для последующего использования.
Пример:
python
def greet():
print("Привет, мир!")
# Сохранение функции в переменную
hello = greet
print(hello) # <function greet at 0x000001D641FBE8C0>
# Вызов функции через переменную
hello()
Объяснение:
- Мы определили функцию
greet
, которая выводит сообщение "Привет, мир!". - Присвоили эту функцию переменной
hello
. - Вызвали функцию через переменную
hello()
, которая работает так же, как вызовgreet()
.
Упражнения:
- Напишите функцию
say_hello
, которая выводит "Привет!". Присвойте её переменной и вызовите через переменную. - Напишите функцию
say_goodbye
, которая выводит "До свидания!". Сохраните её в переменную и вызовите эту функцию через новую переменную. - Определите функцию
print_python
, которая выводит слово "Python". Присвойте её переменной и вызовите через новую переменную.
2. Сохранение функции без параметров в коллекциях и вызов функции
Поскольку функции являются объектами, их можно хранить в коллекциях, таких как списки, кортежи, множества и словари. Это позволяет гибко управлять набором функций, вызывать их по очереди или по ключам.
Пример:
python
def greet():
print("Привет, мир!")
def farewell():
print("До свидания, мир!")
functions = [greet, farewell] # Список функций
print(functions) # [<function greet at 0x000001F73F48E8C0>, <function farewell at 0x000001F73F48EF80>]
for func in functions: # Вызов каждой функции из списка
print(func) # <function greet at 0x000001F73F48E8C0>
func()
Объяснение:
- Мы определили две функции:
greet
иfarewell
. - Сохранили их в список
functions
. - С помощью цикла
for
вызвали каждую функцию из списка.
Упражнения:
- Создайте три функции без параметров, каждая из которых выводит разные сообщения. Сохраните их в список и вызовите все функции по очереди.
- Напишите две функции, которые выводят "Доброе утро" и "Добрый вечер". Сохраните их в кортеж и вызовите обе функции.
- Определите три функции, каждая из которых выводит разные числа. Сохраните их в множество и вызовите их по очереди.
- Создайте две функции, которые выводят "Начало программы" и "Конец программы". Сохраните их в словарь под ключами
"start"
и"end"
. Вызовите каждую функцию через соответствующий ключ.
3. Сохранение функции с параметрами в переменную и вызов функции
Функции с параметрами также можно сохранять в переменные и передавать аргументы при их вызове через переменную.
Пример:
python
def greet(name):
print(f"Привет, {name}!")
say_hello = greet # Сохранение функции в переменную
print(say_hello)
say_hello("Алексей") # Вызов функции через переменную с аргументом
Объяснение:
- Мы определили функцию
greet
, которая принимает параметрname
и выводит персонализированное приветствие. - Сохранили её в переменную
say_hello
. - Вызвали функцию через переменную, передав строку
"Алексей"
в качестве аргумента.
Упражнения:
- Напишите функцию
square
, которая принимает число и выводит его квадрат. Присвойте её переменной и вызовите через переменную с аргументом. - Создайте функцию
multiply
, которая принимает два числа и выводит их произведение. Сохраните её в переменную и вызовите с двумя аргументами. - Напишите функцию
greet_user
, которая принимает имя и выводит приветственное сообщение. Сохраните её в переменную и вызовите через переменную, передав своё имя. - Создайте функцию
divide
, которая принимает два числа и выводит результат их деления. Сохраните её в переменную и вызовите через переменную, передав значения для деления.
4. Сохранение функции с параметрами в коллекциях и вызов функции
Функции с параметрами можно также хранить в коллекциях, таких как списки или словари, и вызывать их с нужными аргументами прямо из этих коллекций. Это может быть полезно для создания набора операций или действий, которые можно вызывать в зависимости от ситуации.
Пример:
python
def add(a, b):
return a + b
def subtract(a, b):
return a - b
# Словарь функций
operations = {
"сложение": add,
"вычитание": subtract
}
print(operations)
# Вызов функций из словаря с аргументами
result1 = operations["сложение"](5, 3)
print(f"Результат сложения: {result1}")
result2 = operations["вычитание"](5, 3)
print(f"Результат вычитания: {result2}")
Объяснение:
- Определены две функции:
add
(сложение) иsubtract
(вычитание). - Эти функции сохранены в словарь
operations
под ключами"сложение"
и"вычитание"
. - Мы вызываем функции из словаря, передавая аргументы 5 и 3, и выводим результаты.
Упражнения:
- Напишите три функции: сложение, вычитание и умножение двух чисел. Сохраните их в список и вызовите каждую с аргументами, переданными пользователем.
- Создайте функцию
greet_user
, которая принимает имя и выводит приветствие, и функциюfarewell_user
, которая принимает имя и выводит прощальное сообщение. Сохраните их в словарь под ключами"привет"
и"пока"
. Вызовите каждую функцию, передавая своё имя. - Напишите четыре функции: сложение, вычитание, умножение и деление двух чисел. Сохраните их в словарь под соответствующими ключами и вызовите каждую функцию с аргументами, заданными пользователем.
- Определите три функции: квадрат числа, куб числа и нахождение корня числа. Сохраните их в список и вызовите каждую с одним аргументом, который введёт пользователь.
Заключение
В Python функции являются объектами первого класса, что позволяет гибко с ними работать: сохранять в переменные, передавать в коллекции, вызывать через переменные и использовать в качестве аргументов или возвращаемых значений других функций. Это делает код более гибким, модульным и удобным для расширения. Упражнения, предложенные в статье, помогут вам лучше понять, как использовать функции как объекты в Python.