Я пытаюсь понять, что такое лучшие практики в подобных случаях, пожалуйста. Предположим, у нас есть dict (или список, или какой-то другой изменяемый), который изменяется внутри функции (но определяется вне ее)
d = {'a': 0}
def my_fun(x):
for i, el in enumerate(x):
d[el] = i + 1
Вызов my_fun(['b', 'c'])
, а затем print(d)
выведет {'a':0, 'b':1, 'c':2}
, который Это хорошо. Однако то же самое можно сделать, добавив оператор возврата в функцию (хотя и не обязательно). Или даже оператор return плюс второй аргумент в функции, представляющей dict:
d = {'a': 0}
def my_fun(x, d):
for i, el in enumerate(x):
d[el] = i + 1
return d
И оператор return, и второй аргумент здесь избыточны, я просто нахожу, что они помогают с точки зрения ясности. Это легче читать. Вызов d = my_fun(['b', 'c'], d)
и затем print(d)
напечатает снова {'a':0, 'b':1, 'c':2}
Наконец, вы можете передать копию изменяемого объекта: d = my_fun(['b', 'c'], d.copy())
, который, вероятно, больше pythoni c, но я не знаю например, если копирование является хорошей практикой с точки зрения управления памятью.
Что считается здесь лучшей практикой? Как вы обрабатываете эти типы и добавляете атрибуты в изменяемые таблицы внутри функций?