empty словарь в качестве значения по умолчанию для аргумента ключевого слова в функции Python: словарь не инициализируется {} при последующих вызовах? [Дубликат]
На этот вопрос уже есть ответ:
numpy массив подкласс нечетким образом разделяет атрибуты между экземплярами 1 ответВот функция. Я намерен использовать значения по умолчанию для аргумента ключевого слова, чтобы сделать словарь пустым, если он не указан.
>>> def f( i, d={}, x=3 ) :
... d[i] = i*i
... x += i
... return x, d
...
>>> f( 2 )
(5, {2: 4})
Но когда я в следующий раз позвоню, я получу:
>>> f(3)
(6, {2: 4, 3: 9})
Похоже, ключевое слово аргумент d при втором вызове указывает не на пустой словарь, а на словарь, который был оставлен в конце предыдущего вызова. Число x сбрасывается до трех при каждом вызове.
Теперь я могу обойти это, но я бы хотел, чтобы вы помогли понять это. Я полагал, что аргументы ключевого слова находятся в локальной области действия функции и будут удалены после того, как функция вернется. (Извините и исправьте мою терминологию, если я неточен.)
Так что локальное значение, на которое указывает имя d, должно быть удалено, и при следующем вызове, если я не предоставлю ключевое слово аргумент d, тогда d должно быть установлено вdefault {}
. Но, как вы можете видеть, d устанавливается в словарь, на который указывал d в предыдущем вызове.
Что происходит
Этоliteral {}
в строке def во вложенной области видимости?
Такое поведение наблюдается в 2.5, 2.6 и 3.1.