Возвращение переменной из функции в функции - Python
Кажется, мне трудно понять концепции передачи аргументов и возврата переменных из функции. Я работаю над проектом, включающим выдачу команд роботу через графический интерфейс Python, который я сделал с помощью протокола rest. В настоящее время я нахожусь в процессе написания отказоустойчивого кода, чтобы запретить пользователю случайное нажатие кнопки загрузки миссии несколько раз и загрузку группы одной и той же миссии. Ниже мой код:
demo = 'e1af13ba-4f38-11e7-9626-f44d3061db09'
mission = 1
def compMissionQueue():
getMissionQueue = robot.get_mission_queue()[1][0]
#print(getMissionQueue)
missionID = getMissionQueue['id']
#print(missionID)
missionGUID = robot.get_mission_GUID_from_queue(missionID)[1]['mission_id']
print(missionGUID)
if missionGUID != mission:
print('Mission successfully added to queue')
else:
print('Mission already in queue. Add again?')
def techDemo():
def loadMission():
#runDemo = robot.load_mission(demo)
#robot.continue_robot()
#robot.pause_robot()
#robot.delete_from_mission_queue(demo)
mission = demo
return mission
loadMission()
compMissionQueue()
print(mission)
return mission
Функция techDemo запускается нажатием кнопки в графическом интерфейсе. Я пытался использовать функцию compMissionQueue, чтобы проверить, была ли миссия уже загружена в очередь, и, если это так, распечатать какое-то сообщение для пользователя. Я попытался проверить, возвращается ли значение 'mission', запустив несколько вызовов для печати, и он не возвращает mission = demo, насколько я могу судить, он всегда печатает '1' с первого раза, когда я установил миссию. Если бы вы могли указать мне правильное направление, это было бы очень ценно. Спасибо!
1 ответ
Ваша проблема в том, что вы ссылаетесь на переменную 'mission' в разных областях.
Рассмотрим этот пример:
mission = 1
def set_mission():
mission = 2
print(mission)
set_mission()
print(mission)
Распечатает:
1
1
"миссия", похоже, не изменилась, да. Происходит то, что "миссия" - это две отдельные переменные, глобальная переменная (определенная строка 1) и локальная переменная (определенная строка 3). Локальный экземпляр существует только в области действия set_mission() и впоследствии удаляется. Когда мы устанавливаем 'mission' в 2, мы устанавливаем локальный экземпляр, а не глобальный экземпляр. Когда мы собираемся распечатать его, мы печатаем глобальный экземпляр, который никогда не трогали!
Есть два способа справиться с этим.
Опция 1
Используйте только глобальную переменную:
mission = 1
def set_mission():
global mission
mission = 2
print(mission)
set_mission()
print(mission)
или же
Вариант 2
Передайте переменную в качестве аргумента, затем верните ее:
mission = 1
def set_mission(my_mission):
my_mission = 2
return my_mission
print(mission)
mission = set_mission(mission)
print(mission)
Оба из них вернут желаемое
1
2
Будьте осторожны с областью действия, и, если сомневаетесь, используйте разные имена переменных в функциях, чтобы избежать путаницы!