Сделать код Python более эффективным для уменьшения размера скрипта? - PullRequest
1 голос
/ 12 апреля 2019

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

def getSound():
    sound_value = grovepi.analogRead(sound_sensor)
    result = firebase.patch('/SoundValues/Monday/'{'Sound1':int(sound_value)})
    print("the sound value is%d" %sound_value)
    time.sleep(1)

def getSound1():
    sound_value = grovepi.analogRead(sound_sensor)
    result = firebase.patch('/SoundValues/Monday/'{'Sound2':int(sound_value)})
    print("the sound value is%d" %sound_value)
    time.sleep(1)

Любая помощь будет принята с благодарностью: -)

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Измените функцию, чтобы она принимала номер звука в качестве параметра:

def getSound(number):
    sound_value = grovepi.analogRead(sound_sensor)
    key = 'Sound%d' % number # this will be 'Sound1', 'Sound2', etc.
    result = firebase.patch('/SoundValues/Monday/'{key :int(sound_value)})
    print("the sound value is%d" %sound_value)
    time.sleep(1)

Тогда вы бы вызвали функцию как getSound(1), getSound(2) и т. Д.

0 голосов
/ 12 апреля 2019

Я бы всегда смотрел, что отличается между getSound () и getSound1 (). Похоже, функции имеют точно такой же код, за исключением этой строки:

result = firebase.patch('/SoundValues/Monday/'{'Sound1':int(sound_value)})

Таким образом, вы можете написать одну функцию со всем повторяющимся кодом и использовать 'sound_spec' в качестве параметра вашей функции. Это будет выглядеть примерно так:

sound_value = grovepi.analogRead(sound_sensor)

def getSound(sound_spec):
    result = firebase.patch(sound_spec)
    print("the sound value is%d" %sound_value)
    print("firebase.path result %s" % str(result))
    time.sleep(1)

После этого вы можете получить список 'sound_specification' и использовать цикл for для получения результата для нескольких значений:

sound_specs = ['/SoundValues/Monday/'{'Sound1':int(sound_value)},'/SoundValues/Monday/'{'Sound2':int(sound_value)}]

for sound_spec in sound_specs:
    getSound(sound_spec)
...