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

В сети

Пользователей: 142
Из них просматривают:
Аналоги: 63. Даташиты: 13. Инструкции: 8. Новости: 31. Остальное: 9. Программы: 1. Теги: 1. Торрент: 1. Форум: 13. Чат: 2.
Участников: 4
Гостей: 138

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

 

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

Разное

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

Интересно

Пайка алюминия и его сплавов.

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