首页 > 解决方案 > 如何正确地将变量传递给方法?(Python)

问题描述

我正在尝试清理我的代码,但我是 python 新手,所以我很确定我的语法是错误的。我编写了一个简单的控制器来使变量message_lx_setPoint接近设定点的值message_lx_setPoint。我正在使用机器人操作系统,因此脚本正在被循环。事实上,它工作正常,值message_lx_current接近 setPoint 的值。以下是我为此编写的代码:

#defs
increment = 0.1

#setPoint values
message_lx_setPoint = 5.0 #value set by some controller(?)
message_ly_setPoint = 5.0

#current values
message_lx_current = 0.0 #value set by some sensor(?)
message_ly_current = 0.0

def approach_lx_setPoint():
    global message_lx_current, message_lx_setPoint, increment

    if message_lx_current < message_lx_setPoint:
        print("current is less than set point")
        message_lx_current += increment

    elif message_lx_current == message_lx_setPoint:
        print("current is equal to set point")
        message_lx_current = 0.0

    elif message_lx_current > message_lx_setPoint:
        print("current is greater than set point")
        message_lx_current -= increment

    return message_lx_current

def approach_ly_setPoint():
    global message_ly_current, message_ly_setPoint, increment

    if message_ly_current < message_ly_setPoint:
        print("current is less than set point")
        message_ly_current += increment

    elif message_ly_current == message_ly_setPoint:
        print("current is equal to set point")
        message_ly_current = 0.0

    elif message_ly_current > message_ly_setPoint:
        print("current is greater than set point")
        message_ly_current -= increment

    return message_ly_current

def main():
    approach_lx_setPoint()
    approach_ly_setPoint()
    print(message_lx_current)
    print(message_ly_current)

我必须对6 个不同的变量执行此操作,所以我的代码开始变得臃肿;我必须总共制作 6 种方法来控制所有 6 个变量。我想让它只做一个方法,我传递要控制的变量和变量作为设定点,然后从那里执行。我在想这样的事情:

#same variables as before

def approachSetPoint(current, target):
    global increment

    if current < target:
        print("current is less than set point")
        current += increment

    elif current == target:
        print("current is equal to set point")
        current = 0.0

    elif current > target:
        print("current is greater than set point")
        current -= increment

    return current

def main():
    approachSetPoint(message_lx_current, message_lx_setPoint)
    approachSetPoint(message_ly_current, message_ly_setPoint)
    print(message_lx_current)
    print(message_ly_current)

我希望这样做的结果是,我将只有一个方法SetPoint def,而不是为每个要控制的变量设置一个approachSetPoint def,我所要做的就是用适当的变量在main中调用它,它会做这件事。

我试过这个,我没有得到任何错误或任何东西,但是,这些值没有被更新(?)。我假设我只是没有正确地将我作为参数传递的变量链接到在方法中修改的变量。知道如何处理我描述的行为吗?提前致谢!

标签: pythonsyntaxros

解决方案


您需要在运行之间将结果存储在函数之外:

message_lx_current = y_current = 0.0
message_lx_setpoint = message_ly_setpoint = 5.0

def approach_setpoint(current, setpoint, increment=0.1):
    if current < setpoint:
        print("current is less than set point")
        current += increment
    elif current == setpoint:
        print("current is equal to set point")
        current = 0.0
    elif current > setpoint:
        print("current is greater than set point")
        current -= increment
    return current

def main():
    message_lx_current = approach_setpoint(message_lx_current, message_lx_setpoint)
    message_ly_current = approach_setpoint(message_ly_current, message_ly_setpoint)
    print(message_lx_current)
    print(message_ly_current)

推荐阅读