Функции Python
Определение функции
python
def greet(name):
"""Приветствие пользователя."""
return f"Привет, {name}!"
result = greet("Мир")
print(result) # "Привет, Мир!"Аргументы функций
Позиционные и именованные аргументы
python
def create_user(name, age, city="Москва"):
return {"name": name, "age": age, "city": city}
# Позиционные
user1 = create_user("Иван", 25)
# Именованные
user2 = create_user(name="Анна", age=30, city="Киев")*args и **kwargs
python
def sum_all(*args):
"""Принимает любое количество позиционных аргументов."""
return sum(args)
print(sum_all(1, 2, 3)) # 6
def print_info(**kwargs):
"""Принимает любое количество именованных аргументов."""
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Иван", age=30, city="Москва")Только позиционные и только именованные
python
# / — до него только позиционные
# * — после него только именованные
def func(pos_only, /, normal, *, kw_only):
print(pos_only, normal, kw_only)
func(1, 2, kw_only=3) # OK
# func(pos_only=1, ...) # TypeError
# func(1, 2, 3) # TypeErrorЛямбда-функции
python
square = lambda x: x ** 2
print(square(5)) # 25
# Часто используется с функциями высшего порядка
numbers = [3, 1, 4, 1, 5, 9]
sorted_nums = sorted(numbers, key=lambda x: -x)
# [9, 5, 4, 3, 1, 1]Функции высшего порядка
python
numbers = [1, 2, 3, 4, 5]
# map — применить функцию к каждому элементу
squares = list(map(lambda x: x ** 2, numbers))
# [1, 4, 9, 16, 25]
# filter — отфильтровать элементы
evens = list(filter(lambda x: x % 2 == 0, numbers))
# [2, 4]
# reduce — свернуть в одно значение
from functools import reduce
total = reduce(lambda a, b: a + b, numbers)
# 15Декораторы
python
import time
def timer(func):
"""Декоратор для замера времени выполнения."""
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
elapsed = time.time() - start
print(f"{func.__name__} выполнена за {elapsed:.4f} сек")
return result
return wrapper
@timer
def slow_function():
time.sleep(1)
slow_function()
# slow_function выполнена за 1.00xx секДекоратор с параметрами
python
def repeat(n):
"""Декоратор, повторяющий вызов функции 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("Привет!")
say_hello()
# Привет!
# Привет!
# Привет!Генераторы
python
def fibonacci(n):
"""Генератор чисел Фибоначчи."""
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for num in fibonacci(10):
print(num, end=" ")
# 0 1 1 2 3 5 8 13 21 34
# Генераторное выражение
squares = (x ** 2 for x in range(10))
print(list(squares)) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Рекурсия
python
def factorial(n):
"""Рекурсивное вычисление факториала."""
if n <= 1:
return 1
return n * factorial(n - 1)
print(factorial(5)) # 120Замыкания
python
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
c = make_counter()
print(c()) # 1
print(c()) # 2
print(c()) # 3