Инструкции

Справочный раздел

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

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

В сети

Пользователей: 132
Из них просматривают:
Аналоги: 106. Даташиты: 12. Инструкции: 3. Новости: 1. Остальное: 2. Программы: 1. Форум: 7.
Участников: 2
Гостей: 130

Google , Яндекс , далее...
Рекорд 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

 

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

Разное

Интересно

Если "ревёт" один из дросселей резонансного стабилизатора, забейте деревянный клин между его катушками.

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