>>>> def print_more(required1, required2, *args):
>…·····print('Need this one:', required1)
>…·····print('Need this one too:', required2)
>…·····print('All the rest:', args)
>…
>>>> 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 гласит: удобочитаемость имеет значение. Вы можете прикрепить документацию к определению функции, включив строку в начало ее тела. Она называется строкой документации:
>>>> def echo(anything):
>…·····'echo returns its input argument'
>…·····return anything
Вы можете сделать строку документации довольно длинной и даже, если хотите, применить к ней форматирование, что показано в следующем примере:
>def print_if_true(thing, check):
>····'''
>····Prints the first argument if a second argument is true.
>····The operation is:
>········1. Check whether the *second* argument is true.
>········2. If it is, print the *first* argument.
>····'''
>····if check:
>········print(thing)
Для того чтобы вывести строку документации некоторой функции, вам следует вызвать функцию help(). Передайте ей имя функции, чтобы получить список всех аргументов и красиво отформатированную строку документации:
>>>> help(echo)
>Help on function echo in module __main__:
>echo(anything)
>····echo returns its input argument
Если вы хотите увидеть только строку документации без форматирования:
>>>> print(echo.__doc__)
>echo returns its input argument
Подозрительно выглядящая строка __doc__ является внутренним именем строки документации как переменной внутри функции. В пункте «Использование _ и __ в именах» в разделе «Пространства имен и область определения» данной главы объясняется причина появления всех этих нижних подчеркиваний.