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.