如何正确地将变量传递给方法? (蟒蛇)

时间:2019-09-19 01:56:43

标签: python syntax ros

我正在尝试清理代码,但是我是python的新手,所以我可以肯定我的语法是错误的。我编写了一个简单的控制器,使变量componentDidMount()接近设定点message_lx_setPoint的值。我正在使用 robot操作系统,因此该脚本正在循环播放。实际上,它工作正常,message_lx_setPoint的值接近setPoint的值。下面是我为此编写的代码:

message_lx_current

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

#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)

我希望这样做的结果是,我不会对每个要控制的变量都拥有一个#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) def ,而只会拥有一个一个 approachSetPoint def,我所要做的就是在主变量中使用适当的变量调用它,然后它将执行该操作。

我尝试了此操作,但没有任何错误或任何提示,但是,这些值未更新(?)。我假设我只是没有正确地将作为参数传递的变量链接到在方法中修改的变量。知道如何处理我所描述的行为吗?预先感谢!

1 个答案:

答案 0 :(得分:1)

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

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)