从函数中的函数返回变量 - Python

问题描述 投票:0回答:1

我似乎很难掌握参数传递和从函数返回变量的概念。我正在开发一个项目,涉及通过我使用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”。如果您能指出正确的方向,我将不胜感激。

python function rest
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

小心范围,如果有疑问,请在函数中使用不同的变量名称,这样你就不太可能感到困惑!

© www.soinside.com 2019 - 2024. All rights reserved.