You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环或序列化生成GPIO引脚状态的JSON响应(避免硬编码)

解决硬编码生成LED状态JSON的问题

这问题我太懂了!硬编码每个LED的状态不仅写起来麻烦,以后要新增或者修改LED引脚的时候,还得挨个改返回语句,维护成本太高。咱们可以用字典推导式来优雅地解决这个问题,既简洁又灵活。

先看你原来的硬编码实现:

LEDS = {"green": 16, "red": 18}

@app.route('/leds/', methods=["GET"])
def api_leds_state():
    return {"green": GPIO.input(LEDS["green"]), "red": GPIO.input(LEDS["red"])}

它返回的响应是:

{ "green": 0, "red": 0 }

改进方案:用字典推导式动态生成响应

只需要把返回语句改成遍历LEDS字典的推导式就行,一行代码搞定所有LED的状态获取:

LEDS = {"green": 16, "red": 18}

@app.route('/leds/', methods=["GET"])
def api_leds_state():
    # 遍历LEDS的键值对,动态生成每个LED的状态
    return {led_color: GPIO.input(pin) for led_color, pin in LEDS.items()}

为什么这么做?

  • 灵活性拉满:以后不管是新增LED(比如加个"blue":20),还是修改现有引脚,都只需要更新LEDS字典,完全不用动API函数的逻辑。
  • 代码更简洁:避免了重复的GPIO.input调用和键名硬编码,可读性和维护性都提升了不少。
  • 自动序列化:Flask会自动把生成的Python字典转换成JSON格式响应,和你原来的输出效果完全一致。

比如你新增一个蓝色LED后,LEDS = {"green":16, "red":18, "blue":20},API会自动返回类似这样的响应:

{ "green": 0, "red": 0, "blue": 1 }

内容的提问来源于stack exchange,提问作者OrElse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:09