"Явное лучше, чем неявное"
...
"Перед лицом двусмысленности откажитесь от искушения угадать."
- PEP 20
Изменение параметра внутри функции не обязательно является плохой вещью. То, что является плохим, - это делать это без веской причины для этого. Если вы ясно знаете название функции и документацию, что параметр будет изменен внутри функции, то это нормально. Если функция изменяет параметр без указания того, что она пытается это сделать, это не так хорошо.
В этом случае ваш Way-1 проще и понятнее. Очевидно, что переменная будет изменена, и способ ее изменения можно легко определить, посмотрев на код.
Way-2 хуже, потому чтоимя change_b
будет означать, что параметр будет изменен, и это , а не . Возвращение модифицированной версии параметра без изменения оригинала является стандартным шаблоном разработки в Python, но лучше об этом прямо заявить.
Например, встроенная в Python структура данных set
имеет методы-аналоги: set.difference(other)
и set.difference_update(other)
. В обоих случаях они делают одно и то же: вычисляют разницу между этим набором и данным набором. В первом случае этот результат возвращается без изменения исходного набора. В последнем случае исходный набор изменяется и ничего не возвращается. Очень просто выяснить, что и для чего.
В общем, вам, вероятно, следует избегать обновления значений и , возвращающих это же значение, потому что это более неоднозначно. Обратите внимание, что большинство методов python делают один или другой, но не оба (и те, которые делают оба, например list.pop()
, делают это разумно, при этом возвращаемый объект не является объектом, который был изменен).