gpt4 book ai didi

python - 在循环中设置对象属性会导致所有属性具有相同的值

转载 作者:太空宇宙 更新时间:2023-11-04 02:24:34 25 4
gpt4 key购买 nike

我正在尝试将一些按钮连接到 Raspberry Pi,以便在按下它们时具有不同的行为。我希望他们每个人在按下或释放按钮时打印他们的名字和状态。在此示例中,我实例化了三个按钮,并在 for 循环中设置了它们的 when_pressedwhen_released 属性:

#!/usr/bin/env python3

from gpiozero import LED, Button
from signal import pause

buttons = {
"bcn": Button(2),
"land": Button(3),
"taxi": Button(4)
}

for name, btn in buttons.items():
btn.when_pressed = lambda: print(name + ' ON')
btn.when_released = lambda: print(name + ' OFF')

print('ready')
pause()

但是,当我按下按钮时,它们会报告正确的状态,但它们都报告相同的名称。例如,所有按钮都可能报告 bcn ONbcn OFF。奇怪的是,当我重新启动脚本时,选择了另一个 - 看似随机的 - 名称并且所有按钮都报告例如land ONland OFF

在我看来,它只是为所有新闻处理程序创建一个 lambda 函数,并为所有发布处理程序创建一个 lambda 函数。我如何修改此脚本以打印每个按钮的正确名称?

最佳答案

将您的 lambda 更改为 lambda name=name: print(name + 'ON')。在您的情况下,name 绑定(bind)到 for 上下文中的本地 name 值。

关于python - 在循环中设置对象属性会导致所有属性具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50760338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com