Могу ли я изменить значение аргумента функции по умолчанию?

Я просто возился с Python и сделал функцию под названием f. Я дал ему ключевое слово/именованный аргумент со значением по умолчанию, инициализированным некоторой переменной:

>>> test = "first"
>>>
>>> def f(test_arg=test):
...    print(test_arg)
>>>
>>> f()
first
>>> test = "second"
>>> f()
first

Я изменил содержимое этой переменной, но значение аргумента по умолчанию не обновилось.

Как я могу изменить значение аргумента по умолчанию?

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

Martijn Pieters 19.03.2019 20:18

См. nedbatchelder.com/text/names.html очень хороший трактат по модели Python.

Martijn Pieters 19.03.2019 20:19

Похоже, что более глубокая проблема может заключаться в том, что аргумент по умолчанию является выражением, а не объектом. Хотя почти все языки со значениями аргументов по умолчанию реализуют их в виде выражений, оцениваемых при каждом вызове, Python является исключением, сохраняя ссылку на конкретный объект, который будет использоваться по умолчанию.

user2357112 supports Monica 19.03.2019 20:26

Я не хочу обновлять внешнюю переменную. Просто ключевое слово.

Wouterr 19.03.2019 20:31

Похоже, вы должны либо использовать f("second"), либо использовать атрибуты функции вместо аргументов.

user2357112 supports Monica 19.03.2019 21:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
36
0

Другие вопросы по теме