Sobes.tech
Junior
109
questionbank

Какие существуют виды аргументов у функций в Python?

AI答案

sobes.tech AI

В Python существуют следующие виды аргументов функций:

  • Позиционные аргументы (positional arguments): Передаются функции в строго заданном порядке.
  • Именованные аргументы (keyword arguments): Передаются функции по имени параметра, позволяя менять порядок и делать вызов более читаемым.
  • Аргументы переменной длины (variable length arguments): Позволяют функции принимать произвольное количество позиционных или именованных аргументов.
    • *args: Собирает все оставшиеся позиционные аргументы в кортеж.
    • **kwargs: Собирает все оставшиеся именованные аргументы в словарь.
  • Аргументы только по позиции (positional-only arguments): Указываются перед символом / в сигнатуре функции. Такие аргументы могут быть переданы только позиционно.
  • Аргументы только по имени (keyword-only arguments): Указываются после символа * или *args в сигнатуре функции. Такие аргументы могут быть переданы только по имени.

Пример:

def example_function(pos_only, /, pos_or_kw, *, kw_only):
    # pos_only - только позиционный
    # pos_or_kw - может быть позиционным или именованным
    # kw_only - только именованный
    print(f"Positional only: {pos_only}")
    print(f"Positional or keyword: {pos_or_kw}")
    print(f"Keyword only: {kw_only}")

# Вызовы функции:
example_function(1, 2, kw_only=3)  # Корректно
# example_function(1, pos_or_kw=2, 3) # Некорректно - kw_only не может быть позиционным
# example_function(pos_only=1, 2, kw_only=3) # Некорректно - pos_only не может быть именованным
example_function(1, pos_or_kw=2, kw_only=3) # Корректно - pos_or_kw как именованный

Пример с *args и **kwargs:

def variable_args_function(arg1, *args, **kwargs):
    # arg1 - обязательный позиционный или именованный
    # args - кортеж оставшихся позиционных
    # kwargs - словарь оставшихся именованных
    print(f"arg1: {arg1}")
    print(f"args: {args}")
    print(f"kwargs: {kwargs}")

variable_args_function(10, 20, 30, name="Alice", age=30)
# Вывод:
# arg1: 10
# args: (20, 30)
# kwargs: {'name': 'Alice', 'age': 30}

Порядок аргументов в определении функции важен: позиционные только, позиционные или именованные, *args, только именованные, **kwargs.