← Назад к вопросам

В чем разница между параметрами и аргументами в Python?

1.3 Junior🔥 191 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между параметрами и аргументами

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

Основные определения

Параметры — это переменные, определённые в сигнатуре функции (при объявлении). Аргументы — это реальные значения, которые передаются функции при вызове.

# Определение функции - параметры
def greet(name, age=18):
    # name и age — это параметры
    print(f"Hello, {name}! You are {age} years old")

# Вызов функции - аргументы
greet("Alice", 25)  # "Alice" и 25 — это аргументы
greet("Bob")        # "Bob" — аргумент, age использует значение по умолчанию

Типы параметров

Позиционные параметры — передаются в порядке определения:

def divide(numerator, denominator):
    # numerator и denominator — позиционные параметры
    return numerator / denominator

print(divide(10, 2))        # 10 → numerator, 2 → denominator
print(divide(2, 10))        # 2 → numerator, 10 → denominator (другой результат!)

Параметры с значениями по умолчанию:

def create_user(username, role="user", active=True):
    # role и active имеют значения по умолчанию
    return {"username": username, "role": role, "active": active}

create_user("alice")  # Использует role="user", active=True
create_user("bob", "admin")  # role переопределён

Типы аргументов

Позиционные аргументы — передаются по порядку:

print(divide(10, 2))  # Позиционные аргументы

Именованные аргументы — передаются с указанием имени параметра:

print(divide(denominator=2, numerator=10))  # Можно в любом порядке
print(divide(10, denominator=2))            # Смешивание позиционных и именованных

*args и **kwargs

Для гибкого количества аргументов используются специальные параметры:

def sum_numbers(*args):
    # *args собирает позиционные аргументы в кортеж
    return sum(args)

print(sum_numbers(1, 2, 3, 4, 5))  # args = (1, 2, 3, 4, 5)

def print_info(**kwargs):
    # **kwargs собирает именованные аргументы в словарь
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, city="NYC")
# kwargs = {"name": "Alice", "age": 30, "city": "NYC"}

Полный пример с разными типами

def configure_app(host="localhost", port=8000, *services, **options):
    # host, port — параметры со значениями по умолчанию
    # *services — собирает позиционные аргументы в кортеж
    # **options — собирает именованные аргументы в словарь
    print(f"Server: {host}:{port}")
    print(f"Services: {services}")
    print(f"Options: {options}")

configure_app("0.0.0.0", 5000, "auth", "db", debug=True, log_level="DEBUG")
# host=0.0.0.0, port=5000
# services=("auth", "db")
# options={"debug": True, "log_level": "DEBUG"}

Практическое значение

Различие между параметрами и аргументами критично для:

  • Проектирования функций — выбора правильных параметров
  • Вызова функций — передачи правильных аргументов
  • Отладки — понимания, почему функция ведёт себя не так
  • Документации — объяснения, что ожидает функция