Инициализируйте переменную функции один раз и измените значение переменной при вызове функции - PullRequest
0 голосов
/ 27 апреля 2018

Язык : Python

Я хочу, чтобы значение переменной было инициализировано нулем в начале выполнения. Эта переменная используется в функции, и ее значение также может быть изменено внутри функции. Но я не хочу, чтобы значение этой переменной сбрасывалось на ноль при каждом вызове функции. Вместо этого его значение должно быть равно обновленному значению предыдущего вызова функции.

Пример:
get_current() постоянно возвращает другое значение, когда оно вызывается. ctemp изначально равен нулю. При первом вызове функции get_current_difference() вернет cdiff и затем обновит значение ctemp так, что ctemp = current. Во втором вызове функции значение ctemp не должно быть равно нулю. Вместо этого оно должно быть равно обновленному значению первого вызова функции.

import serial
arduino = serial.Serial('/dev/ttyACM1',9600)
ctemp = 0

def get_current():
    line = arduino.readline()
    string = line.replace('\r\n','')
    return string

def get_current_difference():
    global ctemp
    current = get_current()
    cdiff = float(current) - ctemp
    return cdiff
    ctemp = current

while 1:
    current = get_current_difference()
    print(current)

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы описываете изменяемое состояние и функцию для его изменения, для чего предназначены классы.

class Temperature:
    def __init__(self, arduino):
        self.ctemp = 0
        self.arduino = arduino

    def current(self):
        line = self.arduino.readline()
        return line.replace('\r\n', '')

    def difference(self):
        current = self.current()
        cdiff = float(current) - self.ctemp
        self.ctemp = current
        return cdiff

t = Tempurature(serial.Serial('/dev/ttyACM1', 9600)
while True:
    print(t.difference())

Использование шкалы классов, если, например, у вас есть несколько мониторов температуры для работы.

0 голосов
/ 27 апреля 2018

Вы вернетесь до установки значения ctemp

return cdiff
ctemp = current

должно стать

ctemp = current
return cdiff
...