В python, если я сделаю следующее:
>>> list = [ 3, 2, 1]
>>> sorted_list = k.sort()
Тогда sorted_list
is None
и list
отсортирован:
>>> sorted_list = k.sort()
>>> print list, sorted_list
[1, 2, 3] None
Однако, если я сделаю следующее:
>>> list = [ 3, 2, 1]
>>> sorted_list = sorted(list)
Тогда список
останется несортированным, а sorted_list
содержит копию отсортированного списка:
>>> print list, sorted_list
[3, 2, 1] [1, 2, 3]
Мне интересно, есть ли эквивалент для обновить функцию
для словарей.
Таким образом, я мог бы сделать что-то вроде этого:
def foo(a, b, extra={}):
bar = { 'first': a, 'second': b }
special_function(**updated(bar, extra))
normal_function(**bar)
вместо того, чтобы делать что-то вроде этого:
def foo(a, b, extra={}):
bar = { 'first': a, 'second': b }
special_bar = bar.copy()
special_bar.update(extra) # [1]
special_function(**special_bar)
normal_function(**bar)
[1] Да, я понимаю, что могу просто заменить эти две строки на extra.update (bar)
но предположим, что я хочу сохранить лишних
, как это будет в дальнейшем в функции.
Я понимаю, что мог бы реализовать это сам следующим образом:
def updated(old_dict, extra={}):
new_dict = old_dict.copy()
new_dict.update(extra)
return new_dict
Или следующий крайне нечитаемый на месте оператор:
special_function(**(dict(bar.items()+extra.items())))
Но я надеялся, что есть что-то встроенное, что я уже мог бы использовать.