Python не изменяет глобальную переменную
У меня есть следующий код:
failure = ""
def walk(dictItems):
returnVal = ""
for key, item in dictItems.items():
if isinstance(item,dict):
walk(item)
else:
returnVal = returnVal +"<li>"+key+" : "+ item + "</li>"
global failure
failure = returnVal
dictItems={"personal_details":{"phone*":"","nationality*":"MW","id_number*":"","gender*":"MALE","title*":"MR","surname":"","marital_status*":"MARRIED","first_name*":"","dob*":"","id_type*":"BUSINESS.REG"},"residential_details":{"city":"","location":"","residence_physical_address":""}}
walk(dictItems)
print(failure)
failure переменная всегда равна null, несмотря на наличие значений в returningVal любая помощь?
О, я понял, вы сбрасываете каждый раз returnVal
, поэтому когда вы присваиваете его failure
пуст. Измените свой код следующим образом:
failure = ""
def walk(dictItems):
for key, item in dictItems.items():
if isinstance(item,dict):
walk(item)
else:
global failure
failure += "<li>"+key+" : "+ item + "</li>"
dictItems={"personal_details":{"phone*":"","nationality*":"MW","id_number*":"","gender*":"MALE","title*":"MR","surname":"","marital_status*":"MARRIED","first_name*":"","dob*":"","id_type*":"BUSINESS.REG"},"residential_details":{"city":"","location":"","residence_physical_address":""}}
walk(dictItems)
print(failure)
Я предполагаю, что вы выполняете итерацию по словарю с подсловарями, поэтому вызов walk при попадании в подсловарь устанавливает значение fail только для ключей и элементов подсловаря. Вы должны добавить, а не установить значение fail. Или функция walk() должна возвращать следующее:
dictItems = {
"key1":"item1",
"key2":"item2",
"key3":{
"subkey1":"subitem1",
"subkey2":"subitem2"
},
"key4":"item4"
}
def walk(dictItems):
returnVal = ""
for key, item in dictItems.items():
if isinstance(item, dict):
returnVal += walk(item)
else:
returnVal += "<li>"+key+" : "+ item + "</li>"
return returnVal
print(walk(dictItems))