Рассмотрим этот упрощенный класс:
class test(object):
def __init__(self):
self.inner_dict = {}
def nested_set_method(self, keys,value=None):
end = len(keys) - 1
for index, component in enumerate(keys):
if index < end or value is None:
self.inner_dict = self.inner_dict.setdefault(component, {})
else:
self.inner_dict[component] = value
и эта функция идентична nested_set_method
из вышеуказанного класса:
def nested_set_standalone(input_dict, keys,value=None):
end = len(keys) - 1
for index, component in enumerate(keys):
if index < end or value is None:
input_dict = input_dict.setdefault(component, {})
else:
input_dict[component] = value
Это пример использования класса:
>>> a = test()
>>> a.inner_dict
{}
>>> a.nested_set_method([1,2,3,4],'l')
>>> a.inner_dict
{4: 'l'}
Это пример использования функции над экземпляром класса:
>>> b = test()
>>> b.inner_dict
{}
>>> nested_set_standalone(b.inner_dict,[1,2,3,4],'l')
>>> b.inner_dict
{1: {2: {3: {4: 'l'}}}}
Я ожидал, что класс nested_set_method
с этим выводом {4: 'l'}
будет иметь тот же вывод, что и функция nested_set_standalone
, которая {1: {2: {3: {4: 'l'}}}}
.
Но чем они отличаются?
EDIT: я запускал эти примеры на Python 3.6.6