примере args является кортежем параметров, который был создан из аргументов,
переданных в функцию print_args():
>>> def print_args(*args):
... print('Positional argument tuple:', args)
...
Если вы вызовете функцию без аргументов, то получите пустой кортеж:
>>> print_args()
Positional argument tuple: ()
Все аргументы, которые вы передадите, будут выведены на экран как кортеж
args:
>>> print_args(3, 2, 1, 'wait!', 'uh...')
Positional argument tuple: (3, 2, 1, 'wait!', 'uh...')
Это полезно при написании функций вроде print(), которые принимают про-
извольное количество аргументов. Если в вашей функции имеются также обяза-
тельные позиционные аргументы, *args отправится в конец списка и получит все
остальные аргументы:
>>> def print_more(required1, required2, *args):
... print('Need this one:', required1)
... print('Need this one too:', required2)
... print('All the rest:', args)
...
Функции
125
>>> print_more('cap', 'gloves', 'scarf', 'monocle', 'mustache wax')
Need this one: cap
Need this one too: gloves
All the rest: ('scarf', 'monocle', 'mustache wax')
При использовании * вам не нужно обязательно называть кортеж параметров
args, однако это распространенная идиома в Python.
Получение аргументов — ключевых слов
с помощью **
Вы можете использовать два астериска (**), чтобы сгруппировать аргументы —
ключевые слова в словарь, где имена аргументов станут ключами, а их значения —
соответствующими значениями в словаре. В следующем примере определяется
функция print_kwargs(), в которой выводятся ее аргументы — ключевые слова:
>>> def print_kwargs(**kwargs):
... print('Keyword arguments:', kwargs)
...
Теперь попробуйте вызвать ее, передав несколько аргументов:
>>> print_kwargs(wine='merlot', entree='mutton', dessert='macaroon')
Keyword arguments: {'dessert': 'macaroon', 'wine': 'merlot', 'entree': 'mutton'}
Внутри функции kwargs является словарем.
Если вы используете позиционные аргументы и аргументы — ключевые слова
(*args и **kwargs), они должны следовать в этом же порядке. Как и в случае с args,
вам не обязательно называть этот словарь kwargs, но это опять же является рас-
пространенной практикой.
Строки документации
Дзен Python гласит: удобочитаемость имеет значение. Вы можете прикрепить
документацию к определению функции, включив строку в начало ее тела. Она на-