Простой Python. Современный стиль программирования (Любанович) - страница 65

>>>> 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__ является внутренним именем строки документации как переменной внутри функции. В пункте «Использование _ и __ в именах» в разделе «Пространства имен и область определения» данной главы объясняется причина появления всех этих нижних подчеркиваний.