Почему моя функция возвращает None?
d={"a": {"f": {"tmp": {"er": 3}, "n": 10}}}
def search(d, skey):
print("debug: ", d)
for i in d:
if i==skey:
print(d[i])
return d[i]
else:
search(d[i], skey)
print(search(d, 'f'))
Данная функция предназнасена для нахождения ключа skey в словаре. Но она возвращает None вместо словаря в котором содержится ключ, в то время как на экран выводится словарь. Как так?
Ответы (3 шт):
Автор решения: CrazyElf
→ Ссылка
Вызов функции из самой себя тоже должен быть с return видимо:
else:
return search(d[i], skey)
Иначе если первый return сработает после вызова функции самой из себя он вернёт управление в место вызова функции, и когда цикл кончится потом, функция в итоге ничего не вернёт, а значит вернёт None.
Автор решения: Андрей Крузлик
→ Ссылка
но надо еще проверку на кол-во ключей, иначе если поставить ключ 'n' будет ошибка
d={
"a": {
"f": {
"tmp": {
"er": 3
},
"n": 10
}
}
}
def search(d, skey):
print("debug: ", d)
for i in d.keys():
if i == skey:
return d[i]
else:
return search(d[i], skey)
print(search(d, 'f'))
Автор решения: Igorok
→ Ссылка
d={'global': {'a': 10, 'b': 4, 'func': {'n': "foo", 'x': 'spam', 'func_f': {"d": 0}} }}
def search(d, skey):
global a
print("search( %s )" % d)
for i in d:
if i==skey:
print("return %s" % d[i])
return d[i]
else:
if type(d[i])==dict:
return search(d[i], skey)
print(search(d, 'f')) # None
print(search(d, 'func_f')) # {'d': 0}
с проверкой ключей