【发布时间】:2023-10-31 23:34:01
【问题描述】:
我正在尝试使用 lambda 作为一种方式来处理 GPIO 按钮的上升/下降状态。因此,我传递了下降 (c1) 和上升 (c2) 的回调,以创建稍后按下 GPIO 按钮时将使用的 lambda。但它不起作用:
# Create lambda to handle both rising and falling triggers/callbacks
def trigger_both( self, pin, c1, c2):
return lambda pin, c1, c2: c1() if GPIO.input(pin) else c2()
c1 和 c2 都是函数。执行 lambda 时运行时出错:
TypeError: () 缺少 2 个必需的位置参数:'c1' 和 'c2' TypeError: () 缺少 2 个必需的位置参数:'c1' 和 'c2'
在上下文中:
if callback and callback2:
callback_both = self.trigger_both(pin, callback, callback2)
GPIO.add_event_detect(pin, GPIO.BOTH, callback=callback_both, bouncetime=200)
【问题讨论】:
-
你必须想出另一个设计。传递给
add_event_detect的callback函数仅使用channel(pin) 参数调用 -
是的,没错,但我不需要/不想在运行时调用 c1/c2 - 这是我的编码错误。接受的答案修复了它:
return lambda pin: c1(pin) if GPIO.input(pin) else c2(pin)
标签: python python-3.x lambda callback