Параметры вызываемых объектов
Именованные сущности в определениях типов, поддерживающих вызов, определяющие то, какие аргументы могут быть приняты при вызове.
Внимание
Параметры и аргументы — две разные сущности, которые не следует путать между собой.
Параметры могут использоваться *для обозначения как обязательных, так и необязательных аргументов*.
Когда один или более параметров имеют форму
параметр=выражение
, говорят, что заданы параметры по умолчанию. Для параметров по умолчанию, соответствующий ему аргумент может быть опущен при вызове и тогда будет использовано значение по умолчанию. Внимание
Если для параметра определено значение по умолчанию, все последующие за ним параметры до
*
должны также иметь значения по умолчанию.def func(a, b=None):
print(a, b)
func()
# TypeError: func() missing 1 required positional argument: 'a'
func(1) # (1, None)
Типы параметров
1. позиционный-или-именованный
Используется для обозначения аргумента, который может быть передан либо как позиционный, либо как именованный. Этот тип параметра используется по умолчанию:
# Здесь a и b - позиционные-или-именованные.
def func(a, b=None):
print(a, b)
func(a=1, b=2) # (1, 2)
func(1, b=2) # (1, 2)
func(1, 2) # (1, 2)
2. только-позиционный
Используется для обозначения аргумента, который может быть передан только в определённой позиции. Начиная с версии +py3.0 (PEP 570) Питон предоставляет средства для определения подобных параметров. До этого момента, такие параметры использовались лишь в некоторых встроенных функциях, например в abs().
Для отделения «только-позиционных» от прочих (позиционных, именованных.) исользуется
/
(косая черта, слэш): # Здесь pos1 и pos2 - только-позиционные.
def func(pos1, pos2, /, pos_or_kw):
print(pos1, pos2, pos_or_kw)
func(1, 3, pos_or_kw=2) # 1 3 2
func(1, pos2=3, pos_or_kw=2)
# TypeError: func() got some positional-only arguments passed as keyword arguments: 'pos2'
3. только-именованный
Поддержка добавлена в +py3.0 (PEP 3102). Используется для обозначения аргумента, который может быть передан только с использованием его имени. Данный тип можно задать, указав единственный вариационно-позиционный параметр, либо добавив
*
перед нужными параметрами. # Здесь kw_only1 и kw_only2 - только-именованные.
def func(*args, kw_only1, kw_only2):
print(args, kw_only1, kw_only2)
func(1, 4, kw_only1=2, kw_only2=3) # (1, 4) 2 3
def func(arg, *, kw_only1, kw_only2):
print(arg, kw_only1, kw_only2)
func(1, 2, 3)
# TypeError: func() takes 1 positional argument but 3 were given
func(1, kw_only1=2, kw_only2=3) # 1 2 3
4. вариационно-позиционный
Используется для обозначения какой-либо последовательности позиционных аргументов (в дополнение к тем позиционным аргументам, которые уже принимаются другими параметрами). Данный тип можно задать добавив перед именем параметра
*
.# Здесь args - вариационно-позиционный.
def func(*args):
print(args)
func(a=1)
# TypeError: func() got an unexpected keyword argument 'a'
func(1, 2) # (1, 2)
func(1, 2, 3, 4) # (1, 2, 3, 4)
5. вариационно-именованный
Используется для обозначения любого количества именованных аргументов (в дополнение к тем именованным аргументам, которые уже принимаются драгими параметрами). Данный тип можно задать добавив перед именем параметра
**
.# Здесь kwargs - вариационно-позиционный.
def func(**kwargs):
print(kwargs)
func(0)
# TypeError: func() takes 0 positional arguments but 1 was given
func(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
На заметку
Модуль
inspect
, помимо прочего, предоставляет средства для получения информации о параметрах функции, в частности inspect.Parameter
.
Синонимы поиска: Параметры вызываемых объектов, параметры, args, kwargs, ключевые слова
В разделе «Callable (вызываемый)»:
def (функция/метод)
Аргументы вызова
На заметку
Читайте нас в Twitter. Ссылка в самом низу страницы.