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

>>>> def is_none(thing):

>…·····if thing is None:

>…·········print("It's None")

>…·····elif thing:

>…·········print("It's True")

>…·····else:

>…·········print("It's False")

>…

Теперь выполним несколько проверок:

>>>> is_none(None)

>It's None

>>>> is_none(True)

>It's True

>>>> is_none(False)

>It's False

>>>> is_none(0)

>It's False

>>>> is_none(0.0)

>It's False

>>>> is_none(())

>It's False

>>>> is_none([])

>It's False

>>>> is_none({})

>It's False

>>>> is_none(set())

>It's False

Позиционные аргументы

Python довольно гибко обрабатывает аргументы функций в сравнении с многими языками программирования. Наиболее распространенный тип аргументов — это позиционные аргументы, чьи значения копируются в соответствующие параметры согласно порядку следования.

Эта функция создает словарь из позиционных входных аргументов и возвращает его:

>>>> def menu(wine, entree, dessert):

>…·····return {'wine': wine, 'entree': entree, 'dessert': dessert}

>…

>>>> menu('chardonnay', 'chicken', 'cake')

>{'dessert': 'cake', 'wine': 'chardonnay', 'entree': 'chicken'}

Несмотря на распространенность аргументов такого типа, у них есть недостаток, который заключается в том, что вам нужно запоминать значение каждой позиции. Если бы мы вызвали функцию menu(), передав в качестве последнего аргумента марку вина, обед вышел бы совершенно другим:

>>>> menu('beef', 'bagel', 'bordeaux')

>{'dessert': 'bordeaux', 'wine': 'beef', 'entree': 'bagel'}

Аргументы — ключевые слова

Для того чтобы избежать путаницы с позиционными аргументами, вы можете указать аргументы с помощью имен соответствующих параметров. Порядок следования аргументов в этом случае может быть иным:

>>>> menu(entree='beef', dessert='bagel', wine='bordeaux')

>{'dessert': 'bagel', 'wine': 'bordeaux', 'entree': 'beef'}

Вы можете объединять позиционные аргументы и аргументы — ключевые слова. Сначала выберем вино, а для десерта и основного блюда используем аргументы — ключевые слова.

>>>> menu('frontenac', dessert='flan', entree='fish')

>{'entree': 'fish', 'dessert': 'flan', 'wine': 'frontenac'}

Если вы вызываете функцию, имеющую как позиционные аргументы, так и аргументы — ключевые слова, то позиционные аргументы необходимо указывать первыми.

Указываем значение параметра по умолчанию

Вы можете указать значения по умолчанию для параметров. Значения по умолчанию используются в том случае, если вызывающая сторона не предоставила соответствующий аргумент. Эта приятная особенность может оказаться довольно полезной. Воспользуемся предыдущим примером:

>>>> def menu(wine, entree, dessert='pudding'):

>…·····return {'wine': wine, 'entree': entree, 'dessert': dessert}