我似乎很难掌握参数传递和从函数返回变量的概念。我正在开发一个项目,涉及通过我使用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 函数来检查任务是否已加载到队列中,如果是,则向用户打印一些消息。我尝试检查是否通过在其上运行多个打印调用来返回“任务”的值,并且据我所知,它没有返回任务=演示,从我第一次设置任务时它总是打印“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
小心范围,如果有疑问,请在函数中使用不同的变量名称,这样你就不太可能感到困惑!