В Python, если я сделаю следующее:
>>> list = [ 3, 2, 1]
>>> sorted_list = k.sort()
Тогда sorted_list
равно None
и list
сортируется:
>>> sorted_list = k.sort()
>>> print list, sorted_list
[1, 2, 3] None
Однако, если я сделаю следующее:
>>> list = [ 3, 2, 1]
>>> sorted_list = sorted(list)
Тогда list
остается несортированным, а sorted_list
содержит копию отсортированного списка:
>>> print list, sorted_list
[3, 2, 1] [1, 2, 3]
Мне интересно, есть ли эквивалент для функции update
для словарей.
Таким образом, я мог бы сделать что-то вроде этого:
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)
, но давайте предположим, что я хочу сохранить extra
, как в дальнейшем в функции.
Я понимаю, что мог бы реализовать это сам таким образом:
def updated(old_dict, extra={}):
new_dict = old_dict.copy()
new_dict.update(extra)
return new_dict
Или следующее крайне нечитаемое утверждение на месте:
special_function(**(dict(bar.items()+extra.items())))
Но я надеялся, что там было что-то встроенное, что я уже мог использовать.