如何在函数被多次调用的情况下保持变量的值?

2024-06-01 03:05:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python函数,每次单击web界面上的按钮时,它都会将伺服向左或向右旋转。目前它是这样工作的:

@cherrypy.expose
def turnCamera (self, **data):

    import pigpio
    import time

    servos=[4,7] #GPIO number
    pigpio.start()
    key = data['direction']
    if key=="left":
            servostatus = "left"
            print servostatus
            m=1500

    elif key=="right":
            servostatus = "right"
            print servostatus
            m=1000

    #to dispense pill
    if key=="dispense":
        m=900
        pigpio.set_servo_pulsewidth(servos[0], m) 
        servostat= "Position of servo: %s"%m
        print servostat
        time.sleep(1)
        m=1500
        pigpio.set_servo_pulsewidth(servos[0], m) 
        servostat= "Position of servo: %s"%m
        print servostat
        time.sleep(1)


    pigpio.stop()

    return servostat

数据从jQuery发布:

$('#left_button').click(function(){
                        $.post('/turnCamera', {direction:"left"}).done(function (reply) {
                            $('#camerapos').empty().append(reply);
                            alert("left button clicked");});

                    });
                    $('#right_button').click(function(){
                        $.post('/turnCamera', {direction:"right"}).done(function (reply) {
                            $('#camerapos').empty().append(reply);
                            alert("right button clicked");});
                    });

不过,我想伺服转动,这样每次点击将使它转100。当脚本第一次运行时,它会转到初始位置m=1500。然后用户可以通过单击左或右来控制相机的位置。像这样:

m=1500
while (m >= 500 and m <= 2500):
        if (key =="left"):
            m=m+100
        elif (key =="right"):
            m=m-100

不过,我明白,这将不起作用,因为m将得到重置为1500每次功能被触发(按钮被点击)。如何存储m的值?你知道吗


Tags: keyrighttimefunctionbuttonreplyleftpigpio
1条回答
网友
1楼 · 发布于 2024-06-01 03:05:25

你可以做这个方法

return [servostat, m]

然后更改该方法,使其具有一个参数,您可以在其中传入上一个调用的m,如def turnCamera(self, **data, m):

具体如下:

$('#left_button').click(function(){
                $.post('/turnCamera', {direction:"left",m_value:m}).done(function (reply) {
                    $('#camerapos').empty().append(reply);
                    alert("left button clicked");});

相关问题 更多 >