Я просто возился с Python и сделал функцию под названием f. Я дал ему ключевое слово/именованный аргумент со значением по умолчанию, инициализированным некоторой переменной:
>>> test = "first"
>>>
>>> def f(test_arg=test):
... print(test_arg)
>>>
>>> f()
first
>>> test = "second"
>>> f()
first
Я изменил содержимое этой переменной, но значение аргумента по умолчанию не обновилось.
Как я могу изменить значение аргумента по умолчанию?
См. nedbatchelder.com/text/names.html очень хороший трактат по модели Python.
Похоже, что более глубокая проблема может заключаться в том, что аргумент по умолчанию является выражением, а не объектом. Хотя почти все языки со значениями аргументов по умолчанию реализуют их в виде выражений, оцениваемых при каждом вызове, Python является исключением, сохраняя ссылку на конкретный объект, который будет использоваться по умолчанию.
Я не хочу обновлять внешнюю переменную. Просто ключевое слово.
Похоже, вы должны либо использовать f("second"), либо использовать атрибуты функции вместо аргументов.






Переменные Python — ссылки на объекты. Вы устанавливаете значение по умолчанию для
test_arg, чтобы оно указывало на тот же объект, на который указывалtest. Установкаtestдля указания на другой объект не изменяет другие ссылки на предыдущий референт.