#python #firebase-realtime-database #grovepi
#python #firebase-realtime-database #grovepi
Вопрос:
обновленный код Я новичок в Python и пытаюсь сделать свой код более эффективным. В настоящее время я переношу значения датчиков в базу данных Firebase в реальном времени в разные поля, но код повторяется. Могу ли я в любом случае уменьшить размер скрипта, используя цикл или альтернативный метод.
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)
Любая помощь будет с благодарностью принята 🙂
Комментарии:
1. Напишите функцию, которая принимает в качестве параметра все, что отличается между этими двумя функциями.
2. Не могли бы вы уточнить, спасибо
3. Я предполагаю, что отсутствует запятая: она должна быть
firebase.patch('/SoundValues/Monday/', {'Sound1':int(sound_value)})
. Верно?
Ответ №1:
Измените функцию так, чтобы она принимала номер звука в качестве параметра:
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)
, и т.д.
Комментарии:
1. Спасибо за ваш ответ! Я получаю следующий результат ошибки = firebase.patch(‘/SoundValues/Monday/'{key:int(sound_value)}) ^ Ошибка синтаксиса: недопустимый синтаксис
2. Я подумал, что это выглядит странно, но я скопировал это из вашего исходного кода, поэтому предположил, что это сработало. Вы действительно запускали опубликованный вами код?
3. Каким
firebase.patch()
должен быть аргумент? Это просто обычная строка, например'/SoundValues/Monday/Sound1'
?4. Я пытаюсь запустить значение датчика звука и сохранить каждое значение в Firebase, а не перезаписывать его, например, мне нужно 10 значений в Firebase, и они будут сохранены от sound1 до sound10
5. Хорошо, но каким
patch()
должен быть аргумент? У вас есть пример? Я ничего не знаю о firebase.
Ответ №2:
Я бы всегда смотрел на то, что отличается между 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)
Комментарии:
1. Спасибо за ваш ответ! Я получаю ошибку имени для sound_value: ошибка имени: имя ‘sound_value’ не определено
2. не могли бы вы опубликовать весь свой код, включая код ‘firebase’?
3. Я включил изображение по ссылке выше в начале вопроса (обновленный код)
4. я только что обновил свой ответ. Значение ‘sound_value’ необходимо определить перед функцией ‘getSound ()’, чтобы функция, а также ‘sound_specs’ могли получить к нему доступ. Я также обновил код внутри функции getSound (), чтобы она также печатала «результат» из firebase.
5. Спасибо за вашу помощь! Теперь я получаю следующую ошибку: TypeError: patch() принимает не менее 4 аргументов (задано 3)