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

Returning Variable from Function in Function - Python

我似乎很难理解参数传递和函数返回变量的概念。我正在从事一个项目,该项目涉及通过我使用休息协议制作的 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 是 'triggered' 通过在 gui 中按下按钮。我试图做的是使用 compMissionQueue 函数来检查任务是否已经加载到队列中,如果是,则向用户打印一些消息。我尝试检查 'mission' 的值是否由 运行 多次打印调用返回,但据我所知它没有返回 mission=demo,它总是从第一次打印“1”我设定了使命。如果您能指出正确的方向,将不胜感激。谢谢!

你的问题是你在不同的范围内引用变量 'mission'。

考虑这个例子:

mission = 1
def set_mission():
    mission = 2
print(mission)
set_mission()
print(mission)

将打印:

1
1

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

有两种处理方法。

选项 1

只使用一个全局变量:

mission = 1
def set_mission():
    global mission
    mission = 2
print(mission)
set_mission()
print(mission)

选项 2

将变量作为参数传递,然后return它:

mission = 1
def set_mission(my_mission):
    my_mission = 2
    return my_mission
print(mission)
mission = set_mission(mission)
print(mission)

这两个都会 return 想要的

1
2

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