Справочник Python

Полное руководство по языку на русском

Функции

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

def greet(name):
    """Документация функции."""
    return f"Привет, {name}!"  # возврат значения

# Вызов
result = greet("Анна")  # присваивание

# Функция без return возвращает None
def log(msg):
    print(f"[LOG] {msg}")  # вывод в консоль

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

# Позиционные
def add(a, b):
    return a + b  # возврат значения
add(2, 3)

# Именованные
add(b=3, a=2)

# Значения по умолчанию
def greet(name, greeting="Привет"):
    return f"{greeting}, {name}!"  # возврат значения

# *args — произвольное число позиционных
def sum_all(*args):
    return sum(args)  # возврат значения
sum_all(1, 2, 3)  # 6

# **kwargs — произвольное число именованных
def print_kwargs(**kwargs):
    for k, v in kwargs.items():  # цикл по элементам
        print(f"{k}: {v}")  # вывод в консоль
print_kwargs(name="Анна", age=30)

# Все вместе: def func(a, b, *args, c=1, **kwargs)

Параметры только по имени (keyword-only)

# После * — только именованные
def configure(*, host, port):
    print(f"{host}:{port}")  # вывод в консоль
configure(host="localhost", port=8080)
# configure("localhost", 8080)  # TypeError!

# С после *args
def func(a, b, *args, verbose=False): ...

Аннотации типов (type hints)

def add(a: int, b: int) -> int:
    return a + b  # возврат значения

def get_user(name: str) -> dict | None:
    ...

from typing import List, Optional  # импорт модуля
def process(items: List[int]) -> Optional[str]: ...  # тип может быть None

Лямбда-функции

# Анонимные функции
square = lambda x: x**2  # анонимная функция
square(5)  # 25

# Сортировка с ключом
pairs = [(1, 'one'), (3, 'three'), (2, 'two')]  # инициализация списка
pairs.sort(key=lambda x: x[1])  # анонимная функция

# filter / map / sorted
nums = [1, 2, 3, 4, 5]  # инициализация списка
list(filter(lambda x: x > 3, nums))  # [4, 5]
list(map(lambda x: x*2, nums))       # [2, 4, 6, 8, 10]

Декораторы

def timer(func):
    import time  # импорт модуля времени
    def wrapper(*args, **kwargs):
        start = time.time()  # метка времени в секундах
        result = func(*args, **kwargs)  # присваивание
        print(f"{func.__name__}: {time.time()-start:.3f}s")  # вывод в консоль
        return result  # возврат значения
    return wrapper  # возврат значения

@timer
def slow_function():
    import time  # импорт модуля времени
    time.sleep(1)  # пауза

slow_function()  # slow_function: 1.002s

# Декоратор с параметрами
def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):  # цикл по элементам
                result = func(*args, **kwargs)  # присваивание
            return result  # возврат значения
        return wrapper  # возврат значения
    return decorator  # возврат значения

@repeat(3)
def say_hello():
    print("Hello!")  # вывод в консоль

Замыкания (closures)

def make_counter():
    count = 0  # числовое значение
    def counter():
        nonlocal count  # доступ к переменной внешней функции
        count += 1
        return count  # возврат значения
    return counter  # возврат значения

c = make_counter()  # присваивание
c()  # 1
c()  # 2
c()  # 3

functools — полезные декораторы

from functools import lru_cache, partial  # импорт модуля

# Кэширование
@lru_cache(maxsize=128)  # кэширование результатов
def fib(n):
    return n if n < 2 else fib(n-1) + fib(n-2)  # возврат значения

# Частичное применение
def power(base, exp):
    return base ** exp  # возврат значения

square = partial(power, exp=2)  # присваивание
square(5)  # 25