Разделы инструкций

В сети

Пользователей: 84
Из них просматривают:
Аналоги: 25. Даташиты: 8. Инструкции: 8. Новости: 13. Остальное: 7. Ошибки: 1. Производители: 2. Профиль пользователя: 1. Форум: 16. Чат: 3.
Участников: 5
Гостей: 79

an , KT315 , Google , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

Оглавление

4.7.1. Значения аргументов по умолчанию

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

 

def ask_ok(prompt, retries=4, complaint='Да или нет, пожалуйста!'):
    while 1:
        ok = raw_input(prompt)
        if ok in ('д', 'да'): return 1
        if ok in ('н', 'не', 'нет'): return 0
        retries = retries - 1
        if retries < 0:
            raise IOError('Пользователь отказывается отвечать')
        print complaint

 

Эта функция может быть вызвана так: 'ask_ok('Вы действительно хотите выйти?')', или так: 'ask_ok('Записать файл?', 2)'.

Значения по умолчанию вычисляются в месте определения функции в области видимости определения, так что

 

i = 5
def f(arg = i): print arg
i = 6
f()

 

выведет 5.

Важное замечание: значение по умолчанию вычисляется только один раз. Это отражается в том случае, когда аргумент со значением по умолчанию является объектом, допускающим изменения, таким как список или словарь. Например, следующая функция накапливает передаваемые аргументы (то есть переменная l является статической)1:

 

def f(a, l = []):
        l.append(a)
        return l
print f(1)
print f(2)
print f(3)

 

Результат выполнения будет следующий:

 

[1]
[1, 2]
[1, 2, 3]

 

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

 

def f(a, l = None):
        if l is None:
                l = []
        l.append(a)
        return l

 

Примечания:
  • Такое поведение является, скорее, нежелательной особенностью языка, использование которой может привести к трудно отлавливаемым ошибкам. В качестве статических переменных рекомендуется использовать глобальные переменные модуля.
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

При замене радиодетали освободить отверстие от припоя можно заострённой спичкой.

Интересно

Канифоль можно изготовить самому, собрав в лесу сосновую (не еловую!) смолу и перетопив ее в консервной банке.

Похожие инструкции