我似乎很难掌握参数传递和从函数返回变量的概念。我正在开发一个项目,涉及通过我使用rest协议制作的python gui向机器人发出命令。我目前正在编写故障安全代码以禁止用户多次意外按下加载任务按钮并加载一堆相同的任务。以下是我的代码:
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由gui中的按钮按下“触发”。我试图做的是使用compMissionQueue函数来检查任务是否已经加载到队列中,如果是,则向用户打印一些消息。我尝试通过在其上运行多个打印调用来检查“任务”的值是否正在返回,并且它不会从我所知道的返回mission = demo,它从我第一次设置任务时始终打印'1'。如果你能指出我正确的方向,我将非常感激。谢谢!
答案 0 :(得分:1)
你的问题是你指的是不同范围内的变量'mission'。


考虑这个例子:


 mission = 1
 def set_mission():
任务= 2
打印(任务)
 set_mission()
打印(任务)



 将打印:


 1
 1



 'mission'didn好像好像变了吧。发生的事情是'任务'是两个独立的变量,一个全局变量(定义为第1行)和一个局部变量(定义为第3行)。本地实例仅存在于set_mission()的范围内,之后将被删除。当我们将'mission'设置为2时,我们设置本地实例而不是全局实例。当我们打印出来时,我们正在打印从未触及的全局实例!


有两种方法可以解决这个问题。
&# xA;
选项1


仅使用全局变量:

&#xA ; mission = 1
 def set_mission():
全球使命
 mission = 2
 print(mission)
 set_mission()
 print(mission)

&#xA;&#xA; 或< / p>&#xA;&#xA;
选项2
&#xA;&#xA;将变量作为参数传递,然后返回:< / p>&#xA;&#xA;
mission = 1&#xA; def set_mission(my_mission):&#xA; my_mission = 2&#xA; return my_mission&#xA; print(mission)&#xA; mission = set_mission(mission)&#xA; print(mission)&#xA;
&#xA;&#xA; 这两个都将返回所需的
&#xA;&#xA; 1&#xA; 2&#xA;
&#xA;&#xA; < p>注意范围,如果有疑问,请在函数中使用不同的变量名,这样你就不会感到困惑!&#xA;