Статьи

Учебные материалы по языку Python — от основ до продвинутых тем

Функции

Страница 10 из 34 · 2026-10-26 · 2 мин чтения

Определение функции

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

Если return не указан, функция возвращает None. Вернуть можно несколько значений — фактически это кортеж:

def min_max(items):    return min(items), max(items)low, high = min_max([3, 1, 4])

Аргументы

Значения по умолчанию

def power(base, exp=2):    return base ** expprint(power(3))print(power(3, 3))

Значение по умолчанию вычисляется один раз при определении функции, поэтому изменяемые объекты в качестве значений по умолчанию использовать нельзя:

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

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

def connect(host, port=80, secure=False):    return host, port, secureprint(connect("localhost", secure=True))print(connect(port=8080, host="example.com"))

args и *kwargs

def total(*args):    return sum(args)def info(**kwargs):    for key, value in kwargs.items():        print(key, value)print(total(1, 2, 3))info(name="Anna", age=25)

Распаковка при вызове:

numbers = [1, 2, 3]options = {"name": "Anna", "age": 25}print(total(*numbers))info(**options)

Только позиционные и только именованные

def f(a, b, /, c, *, d):    return a, b, c, dprint(f(1, 2, 3, d=4))print(f(1, 2, c=3, d=4))

Параметры до / передаются только позиционно, после * — только по имени.

Область видимости

Python ищет имена по правилу LEGB: Local, Enclosing, Global, Built-in.

counter = 0def increment():    global counter    counter += 1def outer():    value = 0    def inner():        nonlocal value        value += 1        return value    return innernext_value = outer()print(next_value())print(next_value())

Злоупотреблять global не стоит — предпочтительнее передавать данные через аргументы и возвращаемые значения.

Функции как объекты

Функции — полноценные объекты, их можно передавать и возвращать:

def apply(func, value):    return func(value)print(apply(len, "abc"))print(apply(str.upper, "abc"))

Лямбда-выражения

square = lambda x: x ** 2print(square(5))words = ["apple", "fig", "banana"]print(sorted(words, key=lambda w: len(w)))

map, filter

nums = [1, 2, 3, 4]print(list(map(lambda x: x * 2, nums)))print(list(filter(lambda x: x % 2 == 0, nums)))

В большинстве случаев списковые включения читаются лучше.

Рекурсия

def factorial(n):    if n <= 1:        return 1    return n * factorial(n - 1)print(factorial(5))

Глубина рекурсии ограничена (по умолчанию около 1000 вызовов), оптимизации хвостовой рекурсии в Python нет.

Строки документации

def area(width, height):    """Возвращает площадь прямоугольника."""    return width * heightprint(area.__doc__)

Задания

  1. Напишите функцию, принимающую произвольное число аргументов и возвращающую их среднее.
  2. Реализуйте функцию Фибоначчи рекурсивно и с помощью цикла, сравните скорость.
  3. Напишите функцию-счётчик на замыканиях.