Используя синтаксис функции def f(**kwargs)
на языке Python, в функции создается словарь аргументов ключевого слова kwargs
, а словари изменяемы, поэтому вопрос заключается в том, что если я изменяю словарь kwargs
, возможно ли, чтобы я мог имеют некоторый эффект вне сферы моей функции?
Из моего понимания того, как работает распаковка словаря и упаковка аргументов аргументов, я не вижу причин полагать, что это может быть небезопасно, и мне кажется, что в Python 3.6 нет опасности:
def f(**kwargs):
kwargs['demo'] = 9
if __name__ == '__main__':
demo = 4
f(demo=demo)
print(demo) # 4
kwargs = {}
f(**kwargs)
print(kwargs) # {}
kwargs['demo'] = 4
f(**kwargs)
print(kwargs) # {'demo': 4}
Однако, является ли это специфичной для реализации или является частью спецификации Python? Могу ли я игнорировать любую ситуацию или реализацию, где (запрещая модификации аргументов, которые сами изменяются, например kwargs['somelist'].append(3)
), такая модификация может быть проблемой?