1

更新的代码我是 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)

任何帮助将不胜感激 :-)

4

2 回答 2

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)等。

于 2019-04-12T16:13:28.323 回答
0

我总是会看看 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)
于 2019-04-12T16:16:29.040 回答