Функции
Определение функций
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