Самый короткий ответ, вероятно, будет «определение - исполнение», поэтому весь аргумент не имеет строгой точки зрения. В качестве более надуманного примера вы можете привести следующее:
def a(): return []
def b(x=a()):
print x
. Надеюсь, этого достаточно, чтобы показать, что не выполнять выражения аргументов по умолчанию во время выполнения инструкции def
не просто или не работает, т. е. смысл, или и то, и другое.
Я согласен с тем, что при попытке использовать конструкторы по умолчанию, это будет gotcha.