Skip to content

Функция как объект в языке Python

Функции в Python являются объектами первого класса. Это означает, что их можно присваивать переменным, хранить в коллекциях, передавать в качестве аргументов другим функциям и возвращать как результат. В этой статье мы рассмотрим, как работать с функциями как с объектами, приведём примеры и предложим упражнения для практики.

1. Сохранение функции без параметров в переменную и вызов функции

В Python можно присвоить функцию переменной и вызвать её позже через эту переменную. Это полезно, когда нужно передать функцию в качестве аргумента другой функции или просто сохранить ссылку на неё для последующего использования.

Пример:

python
def greet():
    print("Привет, мир!")

# Сохранение функции в переменную
hello = greet
print(hello)  # <function greet at 0x000001D641FBE8C0>
# Вызов функции через переменную
hello()

Объяснение:

  1. Мы определили функцию greet, которая выводит сообщение "Привет, мир!".
  2. Присвоили эту функцию переменной hello.
  3. Вызвали функцию через переменную hello(), которая работает так же, как вызов greet().

Упражнения:

  1. Напишите функцию say_hello, которая выводит "Привет!". Присвойте её переменной и вызовите через переменную.
  2. Напишите функцию say_goodbye, которая выводит "До свидания!". Сохраните её в переменную и вызовите эту функцию через новую переменную.
  3. Определите функцию 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()

Объяснение:

  1. Мы определили две функции: greet и farewell.
  2. Сохранили их в список functions.
  3. С помощью цикла for вызвали каждую функцию из списка.

Упражнения:

  1. Создайте три функции без параметров, каждая из которых выводит разные сообщения. Сохраните их в список и вызовите все функции по очереди.
  2. Напишите две функции, которые выводят "Доброе утро" и "Добрый вечер". Сохраните их в кортеж и вызовите обе функции.
  3. Определите три функции, каждая из которых выводит разные числа. Сохраните их в множество и вызовите их по очереди.
  4. Создайте две функции, которые выводят "Начало программы" и "Конец программы". Сохраните их в словарь под ключами "start" и "end". Вызовите каждую функцию через соответствующий ключ.

3. Сохранение функции с параметрами в переменную и вызов функции

Функции с параметрами также можно сохранять в переменные и передавать аргументы при их вызове через переменную.

Пример:

python
def greet(name):
    print(f"Привет, {name}!")

say_hello = greet       # Сохранение функции в переменную
print(say_hello)
say_hello("Алексей")    # Вызов функции через переменную с аргументом

Объяснение:

  1. Мы определили функцию greet, которая принимает параметр name и выводит персонализированное приветствие.
  2. Сохранили её в переменную say_hello.
  3. Вызвали функцию через переменную, передав строку "Алексей" в качестве аргумента.

Упражнения:

  1. Напишите функцию square, которая принимает число и выводит его квадрат. Присвойте её переменной и вызовите через переменную с аргументом.
  2. Создайте функцию multiply, которая принимает два числа и выводит их произведение. Сохраните её в переменную и вызовите с двумя аргументами.
  3. Напишите функцию greet_user, которая принимает имя и выводит приветственное сообщение. Сохраните её в переменную и вызовите через переменную, передав своё имя.
  4. Создайте функцию 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}")

Объяснение:

  1. Определены две функции: add (сложение) и subtract (вычитание).
  2. Эти функции сохранены в словарь operations под ключами "сложение" и "вычитание".
  3. Мы вызываем функции из словаря, передавая аргументы 5 и 3, и выводим результаты.

Упражнения:

  1. Напишите три функции: сложение, вычитание и умножение двух чисел. Сохраните их в список и вызовите каждую с аргументами, переданными пользователем.
  2. Создайте функцию greet_user, которая принимает имя и выводит приветствие, и функцию farewell_user, которая принимает имя и выводит прощальное сообщение. Сохраните их в словарь под ключами "привет" и "пока". Вызовите каждую функцию, передавая своё имя.
  3. Напишите четыре функции: сложение, вычитание, умножение и деление двух чисел. Сохраните их в словарь под соответствующими ключами и вызовите каждую функцию с аргументами, заданными пользователем.
  4. Определите три функции: квадрат числа, куб числа и нахождение корня числа. Сохраните их в список и вызовите каждую с одним аргументом, который введёт пользователь.

Заключение

В Python функции являются объектами первого класса, что позволяет гибко с ними работать: сохранять в переменные, передавать в коллекции, вызывать через переменные и использовать в качестве аргументов или возвращаемых значений других функций. Это делает код более гибким, модульным и удобным для расширения. Упражнения, предложенные в статье, помогут вам лучше понять, как использовать функции как объекты в Python.

Contacts: teffal@mail.ru