Там функция, которая принимает необязательные аргументы.
def alpha(p1="foo", p2="bar"):
print('{0},{1}'.format(p1, p2))
Позвольте мне повторить, что происходит, когда мы используем эту функцию по-разному:
>>> alpha()
foo,bar
>>> alpha("FOO")
FOO,bar
>>> alpha(p2="BAR")
foo,BAR
>>> alpha(p1="FOO", p2=None)
FOO,None
Теперь рассмотрим случай, когда я хочу называть его alpha("FOO", myp2) а myp2 будет либо содержать значение, которое нужно передать, либо быть None. Но даже если функция обрабатывает p2=None, я хочу использовать ее значение по умолчанию "bar".
Может быть, это сформулировано смутно, поэтому позвольте мне сказать следующее:
Если
myp2 is None, вызовитеalpha("FOO"). Иначе, вызовитеalpha("FOO", myp2).
Различие имеет значение, потому что alpha("FOO", None) имеет другой результат, чем alpha("FOO").
Как я могу (но читающе) сделать это различие?
Одна из возможностей, как правило, заключалась бы в том, чтобы проверить отсутствие в alpha, что будет поощряться, потому что это сделает код более безопасным. Но предположим, что alpha используется в других местах, где он фактически должен обрабатывать None как он.
Я бы хотел обработать это на стороне вызывающего абонента.
Одна из возможностей - сделать различие в делах:
if myp2 is None:
alpha("FOO")
else:
alpha("FOO", myp2)
Но это может быстро стать большим количеством кода, когда есть несколько таких аргументов. (экспоненциально, 2 ^ n)
Другая возможность - просто выполнить alpha("FOO", myp2 or "bar"), но это требует, чтобы мы знали значение по умолчанию. Обычно, я бы, вероятно, пошел с таким подходом, но позже я мог бы изменить значения по умолчанию для alpha и этот вызов затем должен быть обновлен вручную, чтобы по-прежнему вызывать его с (новым) значением по умолчанию.
Я использую python 3.4, но было бы лучше, если бы ваши ответы могли обеспечить хороший способ работы в любой версии python.
Вопрос технически закончен здесь, но я снова пересказываю какое-то требование, так как первый ответ затушевал:
Я хочу, чтобы поведение alpha со значениями по умолчанию "foo", "bar" сохранялось в целом, поэтому (возможно) это не вариант изменения самой alpha.
В еще нескольких других словах предположим, что alpha используется где-то еще как alpha("FOO", None) где ожидается выход FOO,None.