Python3: Доступность переменной внутри функции из вложенной функции
У меня есть код, который проходится по вложенным словарям и считает количество таких словарей которые не имеют в ключе key
(список) объектов.
Сейчас я столкнулся с проблемой, что не могу нормально объявить переменную счетчик endpoints
. Мой код в настоящее время:
endpoints = 0
def CountEndpoints(object_:dict, key):
def search(dict_object):
global endpoints
if dict_object[key] == []: endpoints += 1
for item in dict_object[key]: search(item)
search(object_)
return endpoints
Данный подход является не правильным, т.к. переменная endpoints
глобальная, но стоит мне перенести ее в функцию CountEndpoints
как функция search
перестает ее видеть.
Может быть у вас есть идеи как это сделать более изящно чем есть сейчас?
В целом я получаю ожидаемый результат от функции, она будет помещена в класс, от чего я бы хотел отказаться от такого способа объявления переменной.
Ниже отставлю словарь на котором я выполнял тестирование. Ну так, на всякий случай.
{'children': [{'children': [],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Ребенок'},
{'children': [{'children': [],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Ребенок'},
{'children': [{'children': [],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Ребенок'},
{'children': [],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Ребенок'}],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Ребенок'}],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Ребенок'},
{'children': [],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Ребенок'}],
'color': '#FFFFF0',
'description': '',
'focus': False,
'name': 'Родитель'}
Ответы (1 шт):
Решил проблему так:
def CountEndpoints(object_:dict, key):
def search(dict_object):
ep = 0
if not dict_object.get(key): ep += 1
for item in dict_object[key]: ep += search(item)
return ep
return search(object_)
Это тоже работает и удовлетворяет моему желанию, но не отвечает на вопрос как объявить переменную в CountEndpoints
, чтобы я мог с ней работать из search