Подобным argspec является запах кода:
def my_function(things=[]):
...
Разработчики Python избежали бы этого, потому что
things
создается во время определения, а не во время вызова, и это может вызвать странные ошибки.
Обычный шаблон для пустого списка по умолчанию:
def my_function(things=None):
if things is None:
things = []
for thing in things:
...
Мне не очень нравится видеть составные элементы if arg is None
в теле функций снова и снова. Возможно, лучший способ - использовать пустой кортеж:
def my_function(things=()):
for thing in things:
...
Но каков эквивалентный "лучший" способ для сопоставления аргументов, т.е.
def my_function(things=None):
if things is None:
things = {}
for thing in things.viewitems():
...
Есть ли что-то, что можно использовать в качестве неизменяемого типа отображения по умолчанию, учитывая, что PEP416 отклонен?
Обратите внимание, что значение по умолчанию необязательно должно быть пустым, это может быть кортеж или "зависание" разумных значений по умолчанию.