Основы функций и рекурсии в Python: создание функций для выполнения задач и использование рекурсии для решения сложных проблем

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Самоучитель Python 3, собранный из материалов данного сайта.Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Функции в Python: определение, параметры и возвращение значений

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

Как создать функцию в Python

Функции в Python определяются с помощью ключевого слова def, за которым следует имя функции, параметры в круглых скобках и двоеточие. Тело функции обязательно должно быть с отступами:

def function_name(parameters):
    # тело функции
    pass

Пример простейшей функции:

def greet(name):
    print(f"Hello, {name}!")

greet("Alice")  # Hello, Alice!

Параметры и аргументы функций

Функции могут принимать различные типы параметров, что делает их гибкими и универсальными.

Обязательные параметры

def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 8

Параметры по умолчанию

Если аргумент не передан, используется заранее определенное значение:

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

greet("Alice")           # Hello, Alice!
greet("Bob", "Hi")       # Hi, Bob!

Именованные аргументы

Аргументы можно передавать по имени, что делает код более понятным:

def describe_pet(pet_name, animal_type="собака"):
    print(f"У меня есть {animal_type} по имени {pet_name}.")

describe_pet(pet_name="Вилли")         # У меня есть собака по имени Вилли.
describe_pet(animal_type="кот", pet_name="Whiskers")  # У меня есть кот по имени Whiskers.

Аргументы переменной длины

  • *args для позиционных аргументов переменной длины
  • **kwargs для именованных аргументов переменной длины
def make_pizza(size, *toppings):
    print(f"\nПриготовление пиццы размером {size} дюйма со следующими начинками:")
    for topping in toppings:
        print(f"- {topping}")

make_pizza(12, "pepperoni", "mushrooms", "green peppers")

def build_profile(first, last, **user_info):
    profile = {"first_name": first, "last_name": last}
    for key, value in user_info.items():
        profile[key] = value
    return profile

user_profile = build_profile("albert", "einstein", location="princeton", field="physics")
print(user_profile)
# {'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}

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

Функция может возвращать значение с помощью оператора return:

def square(x):
    return x ** 2

result = square(4)
print(result)  # 16

Документация функций (docstrings)

Строки документации используются для описания назначения функции:

def greet(name):
    """Выводит приветственное сообщение с именем."""
    print(f"Hello, {name}!")

print(greet.__doc__)  # Выводит приветственное сообщение с именем.

Рекурсия в Python: принципы и примеры

Рекурсия — это метод программирования, при котором функция вызывает саму себя. Каждая рекурсивная функция должна иметь базовый случай и рекурсивный случай.

Факториал числа

Факториал числа n (n!) — это произведение всех положительных целых чисел от 1 до n:

def factorial(n):
    """Возвращает факториал числа n."""
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 120

Числа Фибоначчи

Последовательность Фибоначчи — каждое число равно сумме двух предыдущих:

def fibonacci(n):
    """Возвращает n-ное число Фибоначчи."""
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(6))  # 8

Ограничения рекурсии

Python имеет ограничение на глубину рекурсии (обычно 1000 вызовов):

import sys
print(sys.getrecursionlimit())  # 1000

sys.setrecursionlimit(1500)

Хвостовая рекурсия

Хвостовая рекурсия — это рекурсия, где рекурсивный вызов является последним действием:

def factorial_tail_recursive(n, accumulator=1):
    """Возвращает факториал числа n, используя хвостовую рекурсию."""
    if n == 0:
        return accumulator
    else:
        return factorial_tail_recursive(n - 1, n * accumulator)

print(factorial_tail_recursive(5))  # 120

Альтернативы рекурсии: итеративные подходы

Итеративный факториал

def factorial_iterative(n):
    """Вычисляет факториал итеративным способом."""
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

print(factorial_iterative(5))  # 120

Итеративные числа Фибоначчи

def fibonacci_iterative(n):
    """Вычисляет число Фибоначчи итеративным способом."""
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a

print(fibonacci_iterative(6))  # 8

Продвинутые техники работы с функциями

Lambda-функции

Lambda-функции — это анонимные функции для простых операций:

square = lambda x: x ** 2
print(square(5))  # 25

sum_two = lambda a, b: a + b
print(sum_two(3, 4))  # 7

Функции высшего порядка

Функции, которые принимают другие функции в качестве аргументов:

def apply_function(func, value):
    """Применяет функцию к значению."""
    return func(value)

print(apply_function(square, 5))  # 25

Декораторы

Декораторы позволяют обернуть одну функцию в другую, изменяя её поведение:

def decorator(func):
    """Декоратор для логирования вызовов функций."""
    def wrapper():
        print("Что-то происходит до вызова функции.")
        func()
        print("Что-то происходит после вызова функции.")
    return wrapper

@decorator
def say_hello():
    print("Hello!")

say_hello()

Замыкания

Замыкания — это функции, которые "запоминают" контекст своего создания:

def outer_function(x):
    """Внешняя функция, создающая замыкание."""
    def inner_function(y):
        return x + y
    return inner_function

closure = outer_function(10)
print(closure(5))  # 15

Когда использовать рекурсию

Рекурсия особенно полезна для:

  • Обработки древовидных структур данных
  • Решения задач, которые можно разделить на подзадачи
  • Реализации алгоритмов типа "разделяй и властвуй"
  • Работы с математическими последовательностями

Рекомендации по использованию

  1. Используйте функции для избежания дублирования кода
  2. Выбирайте итерацию вместо рекурсии для простых задач
  3. Применяйте рекурсию для сложных структур данных
  4. Документируйте функции с помощью docstrings
  5. Тестируйте функции изолированно для лучшей отладки

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

 

категории

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы
  • Общая база питона