Python/Учебник Python 2.6: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 892:
(''Refusenik''{{ref-en}} — [[w:ru:Отказник|Отказник]]). Ниже: «...<code>спросить_подтверждения('Вы действительно хотите выйти?')</code> или так: <code>спросить_подтверждения('Согласны ли вы перезаписать файл?', 2)</code>...»</ref>:
 
<big><source lang="python">def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = raw_input(prompt)
Строка 899:
retries = retries - 1
if retries < 0: raise IOError, 'refusenik user'
print complaint</source></big>
 
Эта функция может быть вызвана, например, так: <code>ask_ok('Do you really want to quit?')</code> или так: <code>ask_ok('OK to overwrite the file?', 2)</code>.
Строка 907:
Значения по умолчанию вычисляются в точке определения функции — в ''определяющей'' области, поэтому код
 
<big><source lang="python">i = 5
 
def f(arg=i):
Строка 913:
 
i = 6
f()</source></big>
 
выведет 5.
Строка 919:
'''Важное предупреждение:''' Значение по умолчанию вычисляется лишь единожды. Это имеет вес когда значением по умолчанию является изменяемый объект, такой как список, словарь (<tt>dictionary</tt>) или экземляры большинства классов. Например, следующая функция накапливает переданные ей аргументы с последовательными вызовами:
 
<big><source lang="python">def f(a, L=[]):
L.append(a)
return L
Строка 925:
print f(1)
print f(2)
print f(3)</source></big>
 
Она выведет
 
<big><source lang="python">[1]
[1, 2]
[1, 2, 3]</source></big>
 
Если вы не хотите, чтобы значение по умолчанию распределялось между последовательными вызовами, вместо предыдущего варианта вы можете использовать такой способ:
 
<big><source lang="python">def f(a, L=None):
if L is None:
L = []
L.append(a)
return L</source></big>
 
==== Именованные аргументы <ref>''(Прим. перев.)'' В оригинале — Keyword Arguments — аргументы по ключевым словам, ключевые аргументы (далее используется слово ''keywords'' для набора имён параметров непостоянного количества. ''Ключевые'' - возможно, корректнее, но как мне показалось — менее понятно ([http://www.infocity.kiev.ua/prog/python/content/sempit_14.phtml альтернативный перевод]))</ref> ====