Найти тему
Интернет сегодня

python: Почему нельзя делать список значением аргумента функции по умолчанию

Функции в python, что может быть проще? Хочешь - возвращай значение, не хочешь - не возвращай, можно задавать любые сложные параметры и никто ругаться не будет. Но так ли это?

На самом деле только отчасти. Не секрет что в функции можно задать стандартное значение для любого аргумента, тогда если при вызове функции этот аргумент не передать, то его значением станет значение по умолчанию. Например напишем функцию по извлечению корня из числа:

По стандарту мы будем извлекать квадратный корень из числа.

Но если попробовать список сделать стандартным значением аргумента, то будут происходить странные вещи. Напишем программу для добавления элемента в список:

-2

Стандартное значение для списка l здесь - пустой список. Вот что выведет эта программа:

-3

Как видим, в третьем принте откуда-то взялось число 95 из второго принта. Также можно заметить, что сам PyCharm ругается на это значение по умолчанию и пишет "Default argument value is mutable":

-4

Это значит, что значением аргумента по умолчанию может стать только значение неизменяемого типа, иначе могут возникнуть вот такие казусы.

Как пофиксить

Пофиксить это очень просто, нужно только заменить пустой список на None, а потом, если l == None, сделать l = []. Например так:

-5

Или проще:

-6

Но тут уж кому как удобнее и понятнее. А на этом всё, вот такая небольшая статейка получилась, если она была вам полезна, не забудьте поставить лайк, был рад помочь!