Создание подпрограмм на Python: параметры, return, области видимости

Раздел: Основы Python -> Функции

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

Основы создания функций в Python

Наиболее эффективный и универсальный способ определения функции - использование ключевого слова def. Этот метод поддерживает любые комбинации параметров, возврат значений, документацию и вложенность. Синтаксис:

def имя_функции(параметры):
    # тело функции
    return результат

аргументы print python (аргументы функции print в python)

После def указывается имя функции, в круглых скобках перечисляются параметры (возможно пустые), затем двоеточие. Тело функции должно иметь отступ. Ключевое слово return завершает выполнение и возвращает значение. Если return отсутствует, функция возвращает None.

Пример простой функции, принимающей имя и возвращающей приветствие:

def greet(name):
    return f'Привет, {name}!'

print(greet('Анна'))  # Вывод: Привет, Анна!

Python 3 аргументы (аргументы в python 3)

Привет, Анна!

аргумент параметр python (аргументы и параметры в python)

Пояснение шагов: объявлена функция greet с параметром name; её вызов с аргументом 'Анна' возвращает строку; результат выводится на экран.

Типичные ошибки при использовании def:

  • Пропущенное двоеточие в конце заголовка - вызывает SyntaxError.
  • Нарушение отступа (смешение табуляции и пробелов) - IndentationError.
  • Забытый return: функция возвращает None, если ожидалось значение.
  • Изменяемые объекты в качестве значений по умолчанию (например, пустой список) - возможны побочные эффекты.

Как создать функцию без параметров?

Если функция не требует входных данных, её можно определить с пустыми скобками:

def show_welcome():
    print('Добро пожаловать в программу!')

show_welcome()  # Вывод: Добро пожаловать в программу!

аргумент класса python (аргументы класса python)

Добро пожаловать в программу!

Python аргументы строки (аргументы строки в python (командная строка))

Такие функции удобны для выполнения повторяющихся действий без передачи данных, например, для вывода меню или сброса состояния.

Частая ошибка - вызов функции без скобок (show_welcome вместо show_welcome()). В результате возвращается ссылка на объект функции, а не её результат, и код не выполняется.

Как создать функцию с аргументами по умолчанию?

Аргументы по умолчанию позволяют задать стандартные значения, которые будут использованы, если вызывающий код не предоставил соответствующий аргумент. Синтаксис: параметр=значение.

def connect(host='localhost', port=8080):
    print(f'Подключение к {host}:{port}')

connect()                    # localhost:8080
connect('example.com', 443)  # example.com:443

аргумент метода python (аргументы метода python)

Подключение к localhost:8080
Подключение к example.com:443

Python args (аргументы в python)

Этот подход используется, когда большинство вызовов используют одни и те же параметры, например, для подключения к серверу по умолчанию.

Опасность с изменяемыми объектами:

Если значением по умолчанию выступает изменяемый объект (список, словарь), то он создаётся один раз при определении функции, а не при каждом вызове. Это может приводить к накоплению данных между вызовами. Пример:

def add_item(item, lst=[]):
    lst.append(item)
    return lst

print(add_item(1))  # [1]
print(add_item(2))  # [1, 2] (ожидается [2])

именованные аргументы функции python (именованные аргументы функции python)

Решение: использовать None и создавать новый объект внутри функции:

def add_item(item, lst=None):
    if lst is None:
        lst = []
    lst.append(item)
    return lst

именованные аргументы python (именованные аргументы python)

Как создать функцию, возвращающую несколько значений?

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

def min_max(numbers):
    return min(numbers), max(numbers)

result = min_max([3, 1, 4, 1, 5, 9])
print(result)            # (1, 9)
low, high = result
print(low, high)         # 1 9

количество аргументов функции python (количество аргументов функции python)

(1, 9)
1 9

параметры и аргументы функции python (параметры и аргументы функции python)

Такой способ удобен, когда нужно вернуть несколько связанных результатов, например, статистику, координаты или статус выполнения.

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

Как создать функцию с произвольным числом позиционных аргументов?

Синтаксис *args (название может быть любым, звездочка обязательна) позволяет функции принимать любое количество позиционных аргументов, которые будут собраны в кортеж.

def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3))  # 6
print(sum_all())         # 0

Python передать аргументы (передача аргументов в python)

6
0

переменное количество аргументов python (переменное количество аргументов python)

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

Ограничение:

После *args нельзя указать позиционные параметры (они должны быть записаны до звездочки). Именованные параметры (со значением по умолчанию) должны следовать после *args, иначе они будут восприняты как часть кортежа.

Как создать анонимную функцию с помощью lambda?

Lambda-выражения позволяют создать однострочную функцию без имени. Синтаксис: lambda аргументы: выражение. Тело может содержать только одно выражение.

double = lambda x: x * 2
print(double(5))  # 10

numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers, key=lambda x: x % 2)
print(sorted_numbers)  # [1, 1, 3, 5, 4] (сортировка по чётности)

Python принять аргументы (приём аргументов в python)

10
[1, 1, 3, 5, 4]

Lambda удобна для простых преобразований, особенно в сочетании с функциями высшего порядка (map, filter, sorted). Не рекомендуется для сложной логики из-за снижения читаемости.

Lambda не поддерживает инструкции (if, for, try и т.д.) и не может содержать несколько строк. Для нетривиальных задач следует использовать def.

- Python тип аргумента (тип аргумента в python)
- Python функция в качестве аргумента (функция как аргумент в python)
- Python return value (возвращаемое значение функции в python)

Расширенные примеры создания функций

Ниже приведены дополнительные примеры, демонстрирующие более сложные возможности определения функций в Python.

Пример 1: Функция с произвольными именованными аргументами (**kwargs)

Пример
def create_profile(**kwargs):
    profile = {}
    for key, value in kwargs.items():
        profile[key] = value
    return profile

print(create_profile(name='Alice', age=30, city='Moscow'))
{'name': 'Alice', 'age': 30, 'city': 'Moscow'}

**kwargs собирает все переданные именованные аргументы в словарь. Это полезно для функций, которые должны обрабатывать произвольные наборы параметров конфигурации.

Пример 2: Функция с аннотациями типов и проверкой входных данных

Пример
def divide(a: float, b: float) -> float:
    if b == 0:
        raise ValueError('Деление на ноль')
    return a / b

print(divide(10, 2))  # 5.0
# print(divide(10, 0)) # ValueError
5.0

Аннотации типов (a: float, -> float) улучшают читаемость и помогают IDE и анализаторам кода. Однако они не проверяются во время выполнения; проверки (например, деление на ноль) необходимо реализовывать самостоятельно.

Пример 3: Рекурсивная функция для вычисления факториала

Пример
def factorial(n):
    if n in (0, 1):
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 120
print(factorial(0))  # 1
120
1

Рекурсия основывается на вызове функции самой себя. Важно определить базовый случай (n=0 или 1) для завершения рекурсии. При больших значениях n может возникнуть переполнение стека (RecursionError).

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

Пример
def apply_twice(func, value):
    return func(func(value))

def add_one(x):
    return x + 1

print(apply_twice(add_one, 5))  # 7
7

Функции в Python являются объектами первого класса, их можно передавать как аргументы. Это основа для работы с map, filter, reduce и декораторами.

Пример 5: Замыкание - функция, возвращающая другую функцию с захваченным состоянием

Пример
def make_multiplier(n):
    def multiplier(x):
        return x * n
    return multiplier

times3 = make_multiplier(3)
print(times3(10))  # 30
times5 = make_multiplier(5)
print(times5(4))   # 20
30
20

Внутренняя функция multiplier запоминает значение n из внешней области видимости (замыкание). Этот механизм используется для создания функций с настраиваемым поведением, например, для генерации конфигурируемых операций.

Создание функции в Python - comments

En
создание функции в python (python)