Ответ 1
Короткий ответ на ваш вопрос: нет, вы не можете исключить оператор if, потому что Python проверяет подпись только один раз, поэтому по умолчанию используется общий доступ ко всем вызовам. Рассмотрим, например:
def addit(x, L=[]):
L.append(x)
return L
Versus:
def addit(x,L=None):
if L is None:
L=[]
L.append(x)
return L
Эти две функции, хотя они выглядят одинаково, фактически имеют совершенно другое поведение; в первом случае значение по умолчанию L делится между вызовами, так что addit(1)
, за которым следует addit(2)
, возвращает в первом случае два объекта, которые фактически указывают на один и тот же базовый объект и имеют значение [1,2]
, а во втором случае он вернет два отдельных объекта, [1]
и [2]
.
Единственная рекомендация, которую я имею для вас, заключается в том, чтобы использовать значение по умолчанию None
просто потому, что это стандартное соглашение для параметров, которые не были указаны, но продолжить использование проверки if, поскольку использование по умолчанию значение какого-либо существующего объекта будет иметь незначительно отличающееся (обычно неправильное) поведение.